【问题标题】:About Inheritance and super()关于继承和 super()
【发布时间】:2017-08-10 16:48:37
【问题描述】:

给定代码:

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,我需要做些什么不同的事情?

【问题讨论】:

标签: python python-3.x class inheritance super


【解决方案1】:

您错误地使用了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__() 方法,该方法在类的方法中恰好可以工作,但没有产生任何实际用途(返回None)。

【讨论】:

  • 谢谢,一直没搞懂super这个概念,做这样的小程序来练习。您的评论有助于消除一些误解。
  • 如果 Character 类接受的参数不仅仅是 'name',我还需要将它们传递给 init 吗?
  • @Matt:是的,因为Character.__init__ 方法需要更多参数。
猜你喜欢
  • 1970-01-01
  • 2016-02-11
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多