python是多继承还是单继承,Python中继承
一个子类可以继承多个父类,也就是多重继承,拥有父类的所有属性和方法。
比如,一个孩子会遗传他父亲和母亲的特征。
目录
(1)语法
(2)多重继承的注意事项
(3)钻石传承
(四)多重继承中的超本质
(A)语法类别子类名称(父类别名称1,父类别名称2…):通过
关于多重继承的说明。如果子类和父类有相同的方法,子类中的方法将被调用。
如果不同的父类中存在相同的方法名,那么调用子类对象时会调用哪个父类的方法?Python将根据MRO(方法解析顺序)方法解析顺序列表进行搜索。
提示:在开发时,您需要避免这种令人困惑的情况!-如果父类之间有同名的属性和方法,尽量避免使用多重继承。
下面的代码可以确定邻近原则:
类A(object):def test1(self):print( A test1 )def test2(self):print( A test2 )类B(object):def test1(self):print( B test1 )def test4(self):print( B test4 )类c (a,b): pass #当父类有相同的方法时调用哪个父类?C=C()c.test1()print(C.mro()) #使用mro()方法查看类print(C.__mro__) #的搜索路径类似于上面的公式 [class _ _ main _ _ c ,Class _ _ main _ Class object ][Class _ _ main _ _。c ,class _ _ main _ _。a ,class _ _ main _ _。b ,类 object] (3)菱形继承python是如何实现继承的?对于您定义的每个类,python将计算
为了实现继承,python将在MRO列表中从左到右搜索基类,直到找到匹配该属性的第一个类。
MRO列表是通过C3线性化算法构建的。这个算法的数学原理我们就不深究了。它实际上是合并所有父类的MRO列表,并遵循以下三个准则:
1.子类将在父类之前被检查。
2.将根据列表中的顺序检查多个父类
3.如果下一个类有两个合法的选择,选择第一个父类。
注意:D类有两个选项,默认选择B类执行。
在Python2.3之前,MRO是基于深度优先算法的。从2.3开始,C3算法被用来优先考虑宽度。当定义一个类时,你需要继承对象。这样的类叫做新类,否则就是旧类。下图左边是旧的,右边是新的。
只有在python3中才有 __mro__ 和 mor() 方法。
(四)多重继承中的超本质
不是直接找父类,而是按照调用节点的广度优先顺序执行。
这里有一个例子:
创建A,B,C,D类,D类继承B类,C类,B类继承A类,C类继承A类。
打电话给管理员()。func()方法在每个方法中检查执行顺序。
解析:d.func一开始执行,就找MRO列表【D、B、C、A】中前面的类D,在D中遇到super.func()时就找D的父类(有B和C,选哪个?),规定就是按照MRO列表【D、B、C、A】, 所以查B再查C,B和C都有super().func,继续找A,最后A--C--B--D
进行方法返回就好了。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。