【问题标题】:Overriding a parent class's methods覆盖父类的方法
【发布时间】:2011-04-17 14:52:56
【问题描述】:

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

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.

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

【问题讨论】:

  • ExcitingMan.say_hi() 的返回值对于大多数处理器来说通常过于令人兴奋。

标签: python class methods subclass overriding


【解决方案1】:

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

当然,编写其他版本的人可能自己编写了父类和/或知道它没有返回值。在那种情况下,他们会决定不使用明确的 return 语句。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我怀疑,至少在这种情况下,因为父函数没有返回任何东西,所以返回它的结果是没有意义的。不过总的来说,当父函数确实返回某些东西时,我认为这是一个很好的做法。

      真的,你是否返回超类所做的事情取决于你希望代码做什么。如果它是你想要的和合适的,那就去做吧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-18
        • 2016-02-23
        • 1970-01-01
        • 1970-01-01
        • 2017-11-11
        • 2013-09-06
        • 1970-01-01
        相关资源
        最近更新 更多