【发布时间】:2013-05-01 08:04:49
【问题描述】:
我对 python 还很陌生,我正在阅读一本关于使用 pygame 创建游戏的书。我在书中遇到了这段代码。我不明白为什么Sprite.__init__(self) 是必要的。我已经运行了带有注释的代码,并且运行方式相同。
class Creep(Sprite):
def __init__(
self, screen, img_filename, init_position,
init_direction, speed)
Sprite.__init__(self)
self.screen = screen
self.speed = speed
self.base_image = pygame.image.load(img_filename).convert_alpha()
self.image = self.base_image
有人知道为什么会出现这种情况以及为什么人们称其为 init?
【问题讨论】:
-
它只是一个特殊的方法,充当实例化类对象的构造函数。 (甚至还有一个用于创建类的构造函数)如果你不想,你就不需要它。
self只是一个约定名称this。这样想,像__init__这样的类方法需要一个自身的引用,并且第一个参数总是self。但是有一个例外:类中的静态方法。但是,在您了解 init 和 self 目的之前,我们不要到达那里。 -
Sprite(self)将实现与Sprite.__init__(self)相同的功能,但要创建一个实例来执行此操作。这种用法有点奇怪,因为它调用__init__方法而不获取结果实例。 -
刚刚注意到
class Creep(Sprite):- 看起来这相当于在当前类上执行super(Creep, self).__init__()。 -
不是重复的,OP 不是在问
__init__方法是什么,而是在问为什么在其中调用Sprite.__init__。
标签: python class initialization