当前位置: 首页 > 后端技术 > Python

python-object-oriented-21-多重继承-方法解析顺序

时间:2023-03-26 13:05:34 Python

1。多重继承基本介绍Python语言支持多重继承,一个子类可以有多个“直接父类”,从而拥有“多个父类”的方法和属性。好处:让我们的类定义非常灵活。缺点:会破坏“整体的类层次结构”,变得极其复杂。大多数情况下,单继承的方式可以满足我们的需求,同时也是为了我们程序的可读性和稳定性,尽量避免使用。当使用多重继承时,可能会形成一个复杂的网络结构,如下图所示:由于在实际生产中不建议使用多重继承的功能,虽然多重继承的知识点很多,我们只指出到最后。2.多重继承简单代码说明多重继承示例代码:classA:defaa(self):print("aa")classB:defbb(self):print("bb")classC(B,A):defcc(self):print("cc")c=C()c.aa()c.bb()c.cc()运行结果:aabbcc程序说明:首先定义类A,其中包含方法aa,然后定义包含方法bb的类B,这是一个很常见的操作。最后定义了C类,先继承B类,再继承A类,这样C类就包含了父类B和父类A的所有方法。即:方法bb和方法aa,加上cc方法自己定义,那么C类同时拥有三个方法。继承结构示意图如下:分别执行三个方法,并输出相应的结果,结果也相应输出3.MRO使用多重继承时,如果父类中有同名方法,子类中没有指定父类当指定了类名时,解释器会“从左到右”顺序查找。MRO(MethodResolutionOrder):方法解析顺序。我们可以通过mro方法()获取类的层次结构,这个在我们讲类继承的时候已经介绍过了。详情请参考之前的介绍。方法解析顺序也是按照这个“类层次结构”来查找的。示例代码:A类:defsay(self):print("aaa")B类:defsay(self):print("bbb")C类(A,B):pass类D(B,A):passc=C()print(C.mro())c.say()print('--'*20)d=D()print(D.mro())d.say()运行结果:[,,,]aaa--------------------------------------[,,,]bbb程序说明:先定义类A,其中包含方法say(),然后定义类B,其中包含与类A同名的方法say(),定义类C,指定即先继承A类再继承B类,因为A类和B类中有同名方法,最后使用A类的say()方法定义D类,指定先继承B再继承继承A类,类似的,因为B类和A类中存在同名方法,最后使用B类的say()方法。先输出C类的类继承关系,然后执行c.say()。找到的两者顺序是一致的,D类对应的操作也是一样的。备注:更多精彩博客请访问:聂法军技术博客对应视频教程请访问:python400完整markdown笔记请访问:python400_learn_github