python - 关于继承和 super()

标签 python python-3.x class inheritance super

给定代码:

class Character():
    def __init__(self, name):
        self.name = name
        self.health = 50
        self.damage = 10

class Warrior(Character):
    def __init__(self, name, weapon, armor):
        super(Character).__init__()
        self.weapon = weapon
        self.armor = armor
        self.strength = 10
        self.dexterity = 5
        self.intelligence = 5

Doug = Character("Doug")
Mark = Warrior("Mark", "Axe", None)

为什么Warrior类不从Character类继承health
我需要做什么不同的事情才能打印 Mark.health

最佳答案

您错误地使用了super();不要单独传入Character。在 Python 3 中,根本不传递任何内容,但将 name 传递给 __init__:

class Warrior(Character):
    def __init__(self, name, weapon, armor):
        super().__init__(name)
        self.weapon = weapon
        self.armor = armor
        self.strength = 10
        self.dexterity = 5
        self.intelligence = 5

现在属性已正确设置,包括生命值伤害:

>>> Mark = Warrior("Mark", "Axe", None)
>>> vars(Mark)
{'name': 'Mark', 'health': 50, 'damage': 10, 'weapon': 'Axe', 'armor': None, 'strength': 10, 'dexterity': 5, 'intelligence': 5}

在幕后,super(Character).__init__() 最终调用 super.__init__() 方法,该方法在类的方法中恰好可以工作但没有产生任何实际用途(None 被返回)。

关于python - 关于继承和 super(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42886139/

相关文章:

python - 在没有冗余代码/文档字符串的情况下转发/重定向 python 类中的方法/属性的最佳方法?

class - 未捕获的类型错误 : Cannot call method 'insert' of undefined

python - 通过减去 pandas 列表中的两列来返回新列

python - 如何删除列表形式的数据帧的重复索引?

python-3.x - 特征匹配+单应性

python-2.7 - Python 2 : someIterator. next() 与 next(someIterator):Python 3

python - Django通过多个字段查询OneToMany

python - 是否有用于简单设置属性的 __init__ 的 Python 快捷方式?

python - 使用 Python 正则表达式在字符之间拆分字符串

Python 多处理负载均衡器