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()

posted @ 2022-08-09 23:14  店里最会撒谎白玉汤  阅读(34)  评论(0)    收藏  举报