关于继承和 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
现在属性设置正确,包括health
和damage
:
>>> 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
返回)。
给定代码:
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
现在属性设置正确,包括health
和damage
:
>>> 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
返回)。