关于继承和 super()

About Inheritance and 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 class 不从 Character class 继承 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

现在属性设置正确,包括healthdamage:

>>> 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__() 方法,该方法在 class 的方法中恰好起作用但没有产生任何实际用途(None 返回)。