什么时候打超级(..)而什么时候不打?

问题描述 投票:0回答:2

关于超类和调用它们的方法,我对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()除了可读性之外,两者有什么区别吗?

python inheritance polymorphism
2个回答
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()

0
投票

如果您没有更改或扩展父方法的功能,那么就没有理由甚至定义它 - 更不用说覆盖它了。如果您没有定义它,那么将使用父方法。

© www.soinside.com 2019 - 2024. All rights reserved.