资源的累加
概念:在一个类的基础上,增加一些额外的资源。
子类相比于父类,多一些自己特有的资源。
在覆盖的方法基础上,新增内容。
方案1:通过调用实例的init方法。但这样会产生重复调用这一现象
B.__init__(self) C.__init__(self)
#-------------------------------重复调用-------------------------------
class D(object): def __init__(self): print("d") class B(D): def __init__(self): D.__init__(self) print("b") class C(D): def __init__(self): D.__init__(self) print("c") class A(B, C): def __init__(self): B.__init__(self) C.__init__(self) print("A") # B() # C() A()
方案2:在低优先级类的方法中,通过“super”调用高优先级类的方法。
概念:是一个类,只能在新式类中使用有效。
作用:起着代理的作用,帮助我们完成以下任务:沿着MRO链条,找到下一级节点,去调用对应的方法。(切记,这是super底层运行机制。)
问题(参看下面的语法原理):
1.沿着谁的MRO链条:参数2
2.找谁的下一个节点:参数1
3.如何对应类方法,静态方法以及实例方法的传参问题:使用参数2进行调用。
语法原理:
格式:super(参数1[, 参数2])
工作原理:def super(cls, inst):
mro = inst.__class__.mro()
return mro[mro.index(cls) + 1]
常用具体语法形式:
python2.2+当中
super(type, object) -> bound super object;
super(type, type2) -> bound super object;
python3+当中
super()