2010-09-27 86 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。所以在这种情况下,没有直接的问题。但请注意,如果有人修改父级以返回值,我们现在可能需要修改每个孩子。

我认为你的建议是正确的。