2016-03-12 148 views
0

我想實現一個類和2個亞類:Python的OOP不同的方法名稱

class cars(object): 
    def chassis(self): 
     ... 

class automobile(cars): 
    def chassisAutomobile(self): 
     ... 

class truck(cars): 
    def chassisTruck(self): 
     ... 

方法「chassisAutomobile」和「chassisTruck」應該比「底盤」同一featuers +附加(爲子類特殊) 特徵。 我想這應該很簡單,如果他們有相同的名字 - 但在我的應用程序中,它會讓你感覺不同,他們有不同的名字(chassis - chassisAutomobile,chassisTruck)。

你將如何在Python中實現這一點? 非常感謝您的幫助!

+4

「但是在我的應用程序中,它會讓你覺得它們有不同的名字」爲什麼這樣呢?真正的卡車有底盤和卡車底盤嗎? –

+2

另外,你應該考慮用單數形式和'CamelCase'命名你的類,例如,而不是'cars'你應該使用'Car'這個名字。 –

+1

你面臨什麼問題?如果你想從'chassisTruck'調用'chassis',只需要做 –

回答

3

你應該使用相同的名稱chassis()他們所有的,因爲它有兩個,一個車的底盤和一輛卡車的底盤不像卡車:

class cars(object): 
    def chassis(self): 
     pass # Do cars stuff 

class automobile(cars): 
    def chassis(self): 
     super().chassis() 
     # Do automobile stuff 

class truck(cars): 
    def chassis(self): 
     super().chassis() 
     # Do truck stuff 

但是,如果你確定你需要不同的名字(所以truck可以同時使用chassis()chassisTruck()),您可以在chassisTruckchassisAutomobile內撥打self.chassis()

2

由於擴展了cars類,因此在兩個子類中都可以訪問.chassis()方法。您可以編寫您的班級特定代碼,然後在最後(或開始)簡單地撥打.chassis()。例如:

class cars(object): 
    def chassis(self): 
     ...common code here... 

class automobile(cars): 
    def chassisAutomobile(self): 
     ...do things... 
     self.chassis() 

class truck(cars): 
    def chassisTruck(self): 
     ...do things... 
     self.chassis() 

作爲一個無關的方面說明;根據PEP 8開始以大寫字母開頭,這是一個好主意。