重写父类的方法

22 投票
3 回答
14453 浏览
提问于 2025-04-16 04:38

我发现很多人总是这样做:

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中,你通常可以查找父类的方法,了解它的功能,但这仍然是个问题。

当然,写出另一种版本的人可能自己写过父类,或者知道它没有返回值。在这种情况下,他们可能就决定不使用明确的返回语句了。

撰写回答