关于超类和调用它们的方法,我对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()
除了可读性之外,两者有什么区别吗?
当覆盖方法除了基类的方法之外还应该执行某些操作时,可以使用super
。
例如,如果你有class Point
和class Circle(Point)
并且想要实现def move
,圆圈可以只重用它们继承的点的方法 - 因为移动圆圈正好移动了圆的中心点。
但是如果你有class Monster
和class Dragon(Monster)
......你可能想要在龙走过时烧焦土地,其他怪物也不会这样做。所以你要说龙运动和正常运动一样,增加了一些火焰:
class Dragon(Monster):
def move(self, destination):
super(Monster, self).move(destination)
destination.add_some_fire()
如果您没有更改或扩展父方法的功能,那么就没有理由甚至定义它 - 更不用说覆盖它了。如果您没有定义它,那么将使用父方法。