这里有新的python学习者,当我看到一些教程时,我偶然发现了这样的代码:
from character import *
class enemy(Character):
def __init__(self, name, hp, str)
Character.__init__(self, name, hp)
在这种情况下,以下代码到底做了什么?第一次在单个类中看到多个 _init _,我似乎无法理解这种类型的代码。
Character.__init__(self, name, hp)
字符文件代码在这里:
class Character(object):
def __init__(self, name, hp):
self.name = name
self.hp = hp
def attack(self,other):
pass
答案 0 :(得分:3)
它正在调用enemy
类的超类Character
的构造函数。当一个类(如enemy
)继承自一个类(在本例中为Character
)时,它需要确保正确设置超类,因此需要在超类上调用__init__
更新:实际上有两种方法可以调用超类的构造函数 - 正如您在上面发布的并使用super
函数。我会引导你去this answer,而不是重新发布已多次讨论过的内容。
答案 1 :(得分:3)
当enemy
定义自己的__init__
方法时,它会覆盖Character
类上的方法。因此,当您使用enemy()
时,不会调用为__init__
类定义的Character
方法。为确保无论如何都要调用它,__init__
中的enemy
方法会自行调用它。 __init__
中定义的Character
方法仍然是一种实例方法,但它取代了新的__init__
方法。如果您说self.__init__()
,则它是enemy.__init__(self)
的快捷方式。在这种情况下,我们不想调用enemy
__init__
方法;我们想要调用Character
__init__
方法,因此我们不会使用self.__init__()
。我们不是使用经常使用的快捷方式,而是直接使用Character
调用__init__
Character.__init__(self)
方法。正如@kevin在另一篇文章的评论中所提到的,通常在这里使用super()
函数:
super().__init__() # In Python3, or
super(enemy, self).__init__() # In Python2