Потому что вы позвонили super(Goblin, self).__init__(self, power, MaxHP, magic, MaxMP, speed, name)
без difficulty
. Вы, вероятно, также хотите наследовать как class Enemy(object)
, чтобы убедиться, что Enemy
- это класс нового стиля, если вы используете 2.x (что, я думаю, должно быть, учитывая старый способ, которым вы использовали 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()
Выходы:
__init__ Cat
__init__ Animal: meow
Edit:
Хорошо, если следующее не работает, возможно, у вас есть старые определения классов, кэшированные в вашем интерпретаторе (попробуйте запустить его на новом интерпретаторе).
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')