代码之家  ›  专栏  ›  技术社区  ›  orokusaki

重写父类的方法

  •  19
  • orokusaki  · 技术社区  · 14 年前

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

    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 回复  |  直到 11 年前
        1
  •  8
  •   Manoj Govindan    14 年前

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

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

        2
  •  5
  •   djna    14 年前

        3
  •  3
  •   JoshD    14 年前

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

    实际上,是否返回超类所做的事情取决于您希望代码做什么。如果这是你想要的和合适的,就去做。