什么时候打超级(..)而什么时候不打?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么时候打超级(..)而什么时候不打?相关的知识,希望对你有一定的参考价值。
关于超类和调用它们的方法,我对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()
另一答案
如果您没有更改或扩展父方法的功能,那么就没有理由甚至定义它 - 更不用说覆盖它了。如果您没有定义它,那么将使用父方法。
以上是关于什么时候打超级(..)而什么时候不打?的主要内容,如果未能解决你的问题,请参考以下文章
Windows 7 更新程序 (KB974332) 系统提示 不适用您的计算机。
打印预览时只有一页,但是打印完之后会自动打多一张空白纸,要怎么设置,才能不打那张空白纸?