python-super
super是一个给内置类
type(super)
<class 'type'>
super(type, type-or-object) 返回一个代理对象,把方法的调用委托给type的父类或兄弟类,即从第二个参数type-or-object的mro链上type的后面开始找起。第二个参数必须是第一个的子类或实例
class A:
def f(self):
print('A')
@classmethod
def g(cls):
print('AG')
def h():
print('H')
class B(A):
def f(self):
print('B')
class C(B):
def f(self):
super(C, self).f()
super(B, C).g() # 第二个参数如果是类可调用类方法,
# 如果要调用实例方法,需要显示的传递self
super(B,C).f(self)
super(B, C).h()
c = C()
c.f()
# B
# AG
# A
# H
# H
super(B,C).g() # 可以再class外面调用
# AG
class A:
def func(self):
print('A')
class B(A):
def func(self):
# 不给super提供参数则等价于
# super(B, self).func()
super().func()
class C(A):
def func(self):
print('C')
class D(B, C):
def func(self):
super().func() # C
B.func(self) # C
# B的func是super().func()
# 等价于super(B, self).func()
# 此时的self是D,D的mro是BCA,所以从B的后面开始找找到B的兄弟类C
D().func()