lim*_*to0 4 python inheritance default init
我正在尝试使用泛型__init__值创建一个类,但其子类具有默认值,如下所示:
class Enemy:
def __init__(self, difficulty, power, MaxHP, magic, MaxMP, speed, name):
self.power = power + 2*difficulty
self.HP = self.MaxHP = MaxHP + 5*difficulty
self.magic = magic + 2* difficulty
self.MP = self.MaxMP = MaxMP + 5*difficulty
class Goblin(Enemy):
def __init_(self, difficulty = 1, power = 1, MaxHP = 5, magic = 1, MaxMP = 5, speed = 5, name = "Goblin"):
super(Goblin, self).__init__(self, power, MaxHP, magic, MaxMP, speed, name)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试创建一个没有全部默认值的 Goblin 对象时(例如,我将只输入一个难度值),它告诉我我需要完整的 8 个参数,即使其余参数已给出默认值。有什么理由我不能这样做还是我在这里做错了什么?
因为你super(Goblin, self).__init__(self, power, MaxHP, magic, MaxMP, speed, name)没有打电话difficulty。如果您使用的是 2.x,您可能还想继承 likeclass Enemy(object)以确保Enemy是一个新式类(考虑到您使用的旧方式,我猜您一定是这样super)。
这是一个更简单的例子:
class Animal(object):
def __init__(self, talk):
print '__init__ Animal: ', talk
class Cat(Animal):
def __init__(self, talk='meow'):
print '__init__ Cat'
super(Cat, self).__init__(talk)
if __name__ == '__main__':
tom = Cat()
Run Code Online (Sandbox Code Playgroud)
输出:
__init__ Cat
__init__ Animal: meow
Run Code Online (Sandbox Code Playgroud)
编辑:
好吧,如果以下方法不起作用,也许您的解释器中缓存了旧的类定义(尝试在新的解释器上运行它)。
class Enemy(object):
def __init__(self, difficulty, power, MaxHP, magic, MaxMP, speed, name):
self.power = power + 2*difficulty
self.HP = self.MaxHP = MaxHP + 5*difficulty
self.magic = magic + 2* difficulty
self.MP = self.MaxMP = MaxMP + 5*difficulty
print 'Raaarghh!! I am the formidable {}.'.format(name)
class Goblin(Enemy):
def __init__(self, difficulty=1, power=1, MaxHP=5, magic=1, MaxMP=5, speed=5, name="Goblin"):
super(Goblin, self).__init__(difficulty, power, MaxHP, magic, MaxMP, speed, name)
if __name__ == '__main__':
g = Goblin(name='user1038783 goblin')
Run Code Online (Sandbox Code Playgroud)