你的位置:邯郸檬蓝代理记账有限公司 > 厚膜电阻 > python多继承的3C算法
python多继承的3C算法
发布日期:2024-07-03 09:58    点击次数:127

python多继承的3C算法

有许多方位齐说python多继承的继承规定,是按照深度遍历的模样,其实python多继承规定的算法,不是严格道理上的深度遍历,而是基于深度遍历基础上优化出一种叫3C算法

python多继承的深度遍历

class C: def run(self): print("这个是C类的顺次"); pass;class A(C): # def run(self): # print("这个是A类的顺次"); pass;class B: def run(self): print("这个是B类的顺次");class MainC(A,B): pass; # def run(self): # print("这个是子类的顺次");m1 = MainC;m1.run;print(MainC.mro)

这段代码输出的效果即是:

这个是C类的顺次[, , , , ]

每个类若是莫得继承其他类的话就默许继承object这个基类 这个是相比平日的多继承,然后是深度遍历的模样

近似继承的问题

基于上头纠正一下

class C: def run(self): print("这个是C类的顺次"); pass;class A(C): # def run(self): # print("这个是A类的顺次"); pass;class B(C): def run(self): print("这个是B类的顺次");class MainC(A,B): pass; # def run(self): # print("这个是子类的顺次");m1 = MainC;m1.run;print(MainC.mro)

这个继承规定就挑升念念了,main继承A和B,A继承C,B也继承C,这就出现了近似继承的问题,那这种情况python是怎样决定继承规定的呢 输出效果:

这个是B类的顺次[, , , , ]

这个效果就出乎料到了,因为按照深度遍历的模样的话,也应该继承C再继承B,然而却不是这么的 这个是因为python关于近似继承的处置,按照这个继承模样的话继承规定是这么的 mianC先继承A,然后到搜检C的情况,发现C同期被A和B继承了,然后就先不处置,接着继承B,然后看C的技术发现,莫得其他的继承了,就接着继承C

愈加复杂的继承

class F: def run(self): print("这个是F类的顺次"); pass;class G: def run(self): print("这个是G类的顺次"); pass;class E(F,G): def run(self): print("这个是E类的顺次"); pass;class C(E): def run(self): print("这个是C类的顺次"); pass;class D(E): def run(self): print("这个是D类的顺次");class A(C): # def run(self): # print("这个是A类的顺次"); pass;class B(D): def run(self): print("这个是B类的顺次");class MainC(A,B): pass; # def run(self): # print("这个是子类的顺次");m1 = MainC;m1.run;print(MainC.mro)

继承规定:

[, , , , , , , , ]

这个即是跟复杂的多继承了,然而独一用到上头说的逻辑去推理就知谈继承规定了 mainc先继承A,然后看C,莫得被近似继承,就继承C,再看E,E被近似继承了,先不处置,再从上头运行看,看B,莫得被近似继承,再看D也莫得被近似继承,径直继承,再看E,也莫得其他的再继承了就不错径直继承,然后再看F,莫得近似继承,就继承,再到G

这个即是本色上python多继承规定的算法,若是单纯说是深度遍历,其实是分辩的

正经

尽量不要用多继承,尽量不要用多继承,尽量不要用多继承。 用多继承会让你的顺次变得复杂又难读,产生的bug也难查