关于超类及其调用方法,我对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()
除了可读性之外,两者之间是否有其他区别?
答案 0 :(得分:1)
当覆盖方法应该对其基类的方法做些什么 时,请使用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()
答案 1 :(得分:0)
如果您不更改或扩展父方法的功能,则没有理由甚至定义它-更不用说重写它了。如果未定义,则将使用父方法。