重写父类的方法

2024-05-16 17:54:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我看到人们一直在做的事情是:

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.

这是因为我和所有错误的程序员在一起,还是因为一个好的理由?


Tags: theselfhelloworldobjectdefhiclass
3条回答

在您给出的示例中,父类方法没有显式的return语句,因此返回None。所以在这一个案例中没有直接的问题。但是请注意,如果有人修改父对象以返回一个值,我们现在可能需要修改每个子对象。

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

我怀疑,至少在这种情况下,因为父函数不返回任何内容,所以返回其结果是没有意义的。一般来说,当父函数确实返回某些内容时,我认为这是一个很好的实践。

实际上,是否返回超级类所做的操作取决于您希望代码执行的操作。如果这是你想要的和合适的,就去做。

我认为显式返回超类方法的返回值更为谨慎(除非在极少数情况下,子类希望抑制它)。尤其是当你不知道超级到底在做什么的时候。同意,在Python中,您通常可以查找super-class方法并找出它的作用,但是仍然可以。

当然,编写另一个版本的人可能自己编写了父类,并且/或者知道它没有返回值。在这种情况下,他们会决定不使用显式的return语句。

相关问题 更多 >