2013-05-01 104 views
3

我对Python很新,我正在阅读一本关于用pygame创建游戏的书。我在书中看到了这段代码。我不明白为什么Sprite.__init__(self)是必要的。我用这个注释运行了代码,它以相同的方式运行。__init__的用途是什么?

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 

任何人有任何想法,为什么这是存在的,为什么人们叫初始化

+0

这只是充当构造函数实例化一个类对象的特殊方法。 (甚至有创建类的构造函数)如果你不想要,你不需要它。 'self''只是一个约定的名称来说''this''。以这种方式考虑,像__init__这样的类方法需要自己的引用,第一个参数总是“self”。但有一个例外:类中的静态方法。但是,除非你明白初始和自我目的,否则我们不要到那里去。 – CppLearner 2013-05-01 08:11:20

+0

'Sprite(self)'会实现与'Sprite .__ init __(self)'同样的事情,但是会创建一个实例来执行此操作。这个用法有点奇怪,因为它调用'__init__'方法而没有得到结果实例。 – mfitzp 2013-05-01 08:24:59

+0

刚刚注意到'class Creep(Sprite):' - 它看起来好像在当前类上做'super(Creep,self).__ init __()'。 – mfitzp 2013-05-01 08:28:16

回答

1

这是调用超类的初始化方法。据推测,Sprite会进行一些初始化,您还需要在子类中进行初始化,并且在Python中需要明确调用该初始化。

但是,通常你会通过调用这样做是为了super

super(Creep, self).__init__() 
+0

好的。我想我对发生了什么事情有一个模糊的想法。类Creep还需要访问Sprite对象的初始化调用中包含的某些变量?请原谅我,如果我的行话有点关闭。编程非常新颖。 – 2013-05-02 20:44:59