super
的{{3}}状态:
这对于访问已在类中重写的继承方法很有用。
在不是 覆盖super().method()
的子类中调用method
有意义吗?
对我来说,没有,因为调用self.method()
是完全相同的,也就是说继承将在method
的超类中使用相同的{{1}查找self
}方法解析顺序(由type(self).__mro__
的超类层次结构的Python documentation决定)比self
的顺序。
在我看来,super
在这种情况下很有用:
super
但不属于这一类:
class A:
def f(self):
print("A")
class B:
pass
class C(B, A):
def f(self):
super().f()
print("C")
C().f() # prints A C
答案 0 :(得分:0)
正如@chepner所指出的,在不覆盖super().method()
的子类中调用method
与调用self.method()
是完全相同的。差异仅出现在该子类的子类中。
比较:
class A:
def f(self):
print("A")
class B:
pass
class C(B, A):
def g(self):
super().f()
print("C")
class D(C):
def f(self):
print("D")
D().g() # prints A C
具有:
class A:
def f(self):
print("A")
class B:
pass
class C(B, A):
def g(self):
self.f()
print("C")
class D(C):
def f(self):
print("D")
D().g() # prints D C