2016-01-22 81 views
0

我目前正在開發一款pygame遊戲。有兩個類。一個是Mass,另一個是Ball。 Ball是Mass的子類繼承是否可以影響子類中的方法?

我創建的每個對象都將從Mass繼承,它是一個基類。在我創建的對象中,我設計了實現重力的方法move。但是我試圖完成的事情是在Mass類中提供這種引力(基本上在方法中定義的負加速度值)。因此,通過在所有move方法中編碼,避免重複。

因此我應該在Mass中定義另一個move方法。子類的方法會覆蓋它嗎?迄今爲止,我尋找解決方案的嘗試都失敗了。所以我不是要求你爲我寫一段代碼,我懇請你能否指出我正確的方向,也許告訴我應該探索什麼,我會很感激。

class Mass(object): 
    # The base class 

class Ball(Mass): 

    def __init__(self, surface, radius, color, starting_pos): 
     self.radius = radius 
     self.color = color 
     self.starting_pos = starting_pos 
     self.surface = surface 

    def move(self): 
     # Keyboard handlers 

    def draw(self): 
     pygame.draw.circle(self.surface, self.color, (self.starting_pos), self.radius) 

回答

2

是,在重寫它默認不會彌撒一個叫子類調用move()。您仍然可以通過它的子類實現內顯式調用父方法。

class Ball(Mass): 
    #... 
    def move(self): 
    Mass.move(self) 
    #... 

你在這裏做什麼,當你撥打ballInstance.move()是剛開的綁定Mass.move方法和球實例ballInstance調用它。這是查看實際操作中顯式self參數的好方法。

+4

或者更一般地說,'super'即可。用於在對象的超類上調用方法。 –

+0

所以這種調用方法實際上是一種方法來複制該方法的源代碼?這是一回事嗎? – Rockybilly

+0

沒有源代碼的副本。這是對'Mass.move'方法的明確調用。 –

2

如果所有Mass對象之間會共享引力,爲什麼它不是類屬性?也可以從子類調用Mass.move

class Mass(object): 
    gravity = -9.8 
    def move(self): 
     #generic movement 
    # The base class 

class Ball(Mass): 
    ... 
    def move(self): 
     Mass.move(self)#run the one defined in Mass 
     #then do anything extra 
     print(self.gravity) 

這樣的常數所有對象和任何子類之間共享仍然可以依靠大衆公用代碼

相關問題