【问题标题】:Inheritiance __init__ from classes in python [duplicate]从python中的类继承__init__ [重复]
【发布时间】:2020-04-28 09:55:30
【问题描述】:

所以我似乎无法弄清楚如何从我的班级继承__init__。 我正在尝试自己制作一个角色扮演游戏,而我最近才了解到使用继承来制作我的敌人、角色和类似的东西是一个更好的主意。 所以我开始使用它来对付敌人,但遇到了 init 方法的问题。 这是我的敌人班:

class Enemy():
    def __init__(self, number_of, name):
        self.number_of = int(number_of)
        self.name = name
        self.hp = 20 * self.number_of
        self.dmg = 2 * self.number_of
    def attack(self, player):
        dmg = 0
        player.hp -= dmg
    def appearing(self):
        if self.number_of > 1:
            print (f"{self.number_of} {self.name}s have appeared")
        else:
            print(f"A {self.name} has appeared") 

我尝试了不同的方法来制作特定的敌人类别。我将留下这些方法,因为它们对我来说很好用,并专注于我班级的 init。 所以首先我尝试这样做:

class Orc():
    def __init__(self):
        Enemy.__init__(self,number_of, name)

但是 Python 使它成为类型错误: TypeError: init() 接受 1 个位置参数,但给出了 3 个

我也试过把self放在number_of和name前面,但还是出现了同样的错误。

然后我尝试在原始 init 中输入参数:

class Orc():
def __init__(self, number_of,name):
    Enemy.__init__(self,self.number_of, self.name)

但这只是导致了一个属性错误:

AttributeError: 'Orc' 对象没有属性 'number_of'

然后我试着把 self.在 init 前面,但随后出现了语法错误。

我只是为每个类(每种类型的敌人)做了不同的 init,甚至没有在父(敌人)类中使用 init

那么我做错了什么,我能做些什么呢,在父类中实际使用 init 方法,并保存一些代码

【问题讨论】:

  • 我没有看到任何继承。
  • 好的,所以它现在可以工作了。我很困惑,我一定是在我多次尝试开始时的某个时候删除了它。无论如何感谢您的帮助

标签: python class inheritance


【解决方案1】:

首先,您需要从Orc 类中的Enemy 类实际继承,然后您可以简单地调用super()

class Orc(Enemy):
    def __init__(self, number_of, name):
        super().__init__(number_of, name)

self 会在你调用 super 时自动传递给类。

【讨论】:

  • 如果您只希望它与基类中的相同,则根本不必覆盖__init__
  • @khelwood 没错,但我认为 OP 会在 Orc 类的 __init__ 中做其他事情。
猜你喜欢
  • 1970-01-01
  • 2011-09-26
  • 2011-08-03
  • 2013-10-18
  • 1970-01-01
  • 2012-01-31
  • 2020-07-05
  • 2021-11-28
  • 2010-10-19
相关资源
最近更新 更多