什么时候调用super(..),什么时候不调用?

时间:2018-08-30 09:35:40

标签: python inheritance polymorphism

关于超类及其调用方法,我对python中的编程风格/约定有一个简单的问题。

假设我有

class A():
  def a(self):
    print "a"

我还有另一个班级B类。这样做更好吗:-

class B(A):
  pass

vs

class B(A):
  def a(self):
    super(B,self).a()

我最终想做:b = B(); b.a() 除了可读性之外,两者之间是否有其他区别?

2 个答案:

答案 0 :(得分:1)

当覆盖方法应该对其基类的方法做些什么 时,请使用super

例如,如果您拥有class Pointclass Circle(Point)并想要实现def move,则圆只能重用其继承的点的方法-因为移动圆正好是在移动圆的中心点

但是,如果您有class Monsterclass Dragon(Monster) ...,您可能想在龙走过时烧焦土地,而其他怪物则不会。因此,您可以说龙的动作与普通的动作相同,只是增加了一些火力:

class Dragon(Monster):
    def move(self, destination):
        super(Monster, self).move(destination)
        destination.add_some_fire()

答案 1 :(得分:0)

如果您不更改或扩展父方法的功能,则没有理由甚至定义它-更不用说重写它了。如果未定义,则将使用父方法。