重写父类的方法
我发现很多人总是这样做:
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.
这是因为我交的程序员朋友不对,还是说这样做有原因呢?
3 个回答
3
我觉得,在这种情况下,父函数没有返回任何东西,所以返回它的结果就没有意义。不过一般来说,如果父函数有返回值,我认为这样做是可以的。
其实,是否返回父类的结果,主要看你想让代码做什么。如果这是你想要的,并且合适的话,就去做吧。
5
在你给的例子中,父类的方法没有明确的返回值,所以它返回的是None(空值)。在这种情况下,暂时没有什么问题。但要注意,如果有人修改了父类的方法,让它返回一个值,那么我们可能需要修改每个子类的方法。
我觉得你的建议是对的。
9
我认为,明确地返回父类方法的返回值是更谨慎的做法(除非在少数情况下,子类想要抑制这个返回值)。特别是当你不知道父类到底在做什么的时候。没错,在Python中,你通常可以查找父类的方法,了解它的功能,但这仍然是个问题。
当然,写出另一种版本的人可能自己写过父类,或者知道它没有返回值。在这种情况下,他们可能就决定不使用明确的返回语句了。