2010-09-27 109 views
19

一些我看到的人做所有的時間是:重寫父類的方法

class Man(object): 
    def say_hi(self): 
     print('Hello, World.') 

class ExcitingMan(Man): 
    def say_hi(self): 
     print('Wow!') 
     super(ExcitingMan, self).say_hi() # Calling the parent version once done with custom stuff. 

的東西,我從來沒有看到有人做的是:

class Man(object): 
    def say_hi(self): 
     print('Hello, World.') 

class ExcitingMan(Man): 
    def say_hi(self): 
     print('Wow!') 
     return super(ExcitingMan, self).say_hi() # Returning the value of the call, so as to fulfill the parent class's contract. 

這是因爲我與所有掛錯的程序員,還是有一個很好的理由?

+24

對於大多數處理器來說,ExcitingMan.say_hi()的返回值通常太令人興奮了。 – intuited 2010-09-27 07:40:35

回答

8

我認爲顯式返回超類方法的返回值更加謹慎(除非兒童想要抑制它)。特別是當你不知道超級在做什麼。同意,在Python中,您通常可以查找超類方法並找出它的作用,但仍然如此。

當然,編寫其他版本的人可能自己寫了父類,並且/或者知道它沒有返回值。在那種情況下,他們會決定沒有和明確的回報聲明。

3

我會懷疑,至少在這種情況下,因爲父函數不返回任何東西,所以返回結果沒有意義。一般來說,當父函數返回時,我認爲這是一個很好的習慣。

真的,你是否返回超級類的功能取決於你想要的代碼。如果這是你想要的和適合的話,就去做吧。

5

在這個例子中,你給父類的方法沒有顯式的返回語句,所以返回None。所以在這種情況下,沒有直接的問題。但請注意,如果有人修改父級以返回值,我們現在可能需要修改每個孩子。

我認爲你的建議是正確的。