2013-05-01 105 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