单个班级中多个__init__的作用是什么?

时间:2016-03-26 23:52:24

标签: python class

这里有新的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

2 个答案:

答案 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