python是多继承还是单继承,Python中继承

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: