python - 如何在Python中编辑继承类的属性而不初始化新类?

标签 python class oop inheritance attributes

我的问题很好地说明了问题,所以我将直接进入代码。

class Boxer:
    def __init__(self, name):
        self.name = name
        self.health = 100
        self.damage = 20
        self.power = 30

这是原始类或父类

class Prince(Boxer):
    self.damage = 40
    self.health = 80

我想做的是继承大部分类属性,并且只编辑这两个(伤害,生命值),有什么方法可以做到这一点而不必创建整个其他类?

最佳答案

好吧,有两件事不太对劲。首先,Prince - self 的代码只能在方法内部使用,例如构造函数。 Prince 的属性实际上应该如下所示:

class Prince(Boxer):
    damage = 40
    health = 80

其次,Boxer 中的构造函数在调用时将覆盖这些默认值。因此,对于那些可重写的,您需要在类定义中设置属性,而不是构造函数:

class Boxer:
    health = 100
    damage = 20
    power = 30

    def __init__(self, name):
        self.name = name

这应该会让您按照预期的方式工作。

编辑

如果您确实不想为每种类型的拳击手使用子类,则另一种选择可能是在构造函数中使用默认值,并且可以覆盖这些默认值。所以:

class Boxer:
    def __init__(self, name, health=100, damage=20, power=30):
        self.name = name
        self.health = health
        self.damage = damage
        self.power = power

然后:

Boxer("Alan") # Ordinary boxer
Boxer("Prince", damage=40, health=80) # Prince is special

关于python - 如何在Python中编辑继承类的属性而不初始化新类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48053797/

相关文章:

oop - 接口(interface)作为能力或接口(interface)作为类型

python - 如何在 Airflow 上重新启动失败的任务

python - 求素数函数

python - 通过不同的方法使用 beautiful soup 获取 href

python - 减去时间并得到以年为单位的输出,四舍五入到小数点后两位

php - 在类中使用全局函数是不好的做法吗?

java - 类声明中的 ArrayList<Product> 如何访问 ArrayList

Java 类层次结构

PHP,如何在方法之间传递变量?

c++ - 在抽象基类的不同实现中返回没有复制的类成员与返回本地对象