上一篇介绍了多重继承的概念、语法、代码演练、使用注意事项。有兴趣的可以看看,本文是在上一篇文章的基础上做的延伸科普,简单了解一下即可。一、Python中的MRO——方法搜索顺序【多重继承顺序】所谓方法搜索顺序就是对象调用方法时python解释器创建对象的类的顺序,以及在父类之间搜索方法的顺序。python中为类提供了一个内置属性mro,用于查看方法查找顺序。(mro前后两个下划线)MRO是methodresolutionorder的缩写,主要用于多重继承时判断方法和属性的调用路径。判断C类对象的方法调用顺序:上篇代码不变,输出如下:print(C.__mro__)具体代码:classA:deftest(self):print("A---测试方法")defdemo(self):print("A---demo方法")B类:defdemo(self):print("B---demo方法")deftest(self):print("B---testmethod")classC(B,A):pass#创建子类对象c=C()c.test()c.demo()print(C.__mro__)执行结果:result流程描述:在控制台输出一个元组。当要求C类创建一个对象方法时,Python解释器会先检查C类中是否有这样的方法,如果有则直接执行,不向后查找。如果没有找到这个方法,就会按照元组的顺序从左到右查找第二个类中是否有这个方法。如果在B类中找到,则直接执行,不会向后查找。如果没有找到,就会按照从左到右的顺序继续向下查找。在第三个类中,A类会继续查找是否提供了这个方法。如果找到,它将被执行。如果没有找到,就会继续寻找下一个类对象。类,如果程序没有找到,会报错。(在python3中,object是所有类的基类,也就是说只要定义了一个类,这个类的最终基类就是object类。简单来说object是python中所有类的祖先类)总结:查找方法时,是根据__mro__的输出从左到右查找的。如果在当前类中找到该方法,则直接执行。如果没有找到,就会去查找下一个类中是否有对应的方法。如果找到,它将被执行。不查找直接执行。如果找到最后一个类,没有找到方法,程序就会报错。2.新式类和旧式(经典)类【科普】object是python为所有对象提供的基类,提供了一些内置的属性和方法,可以使用dir函数查看。新型类:推荐以object为基类的类。经典类:不以object为基类的类,不推荐使用。python2.x和Python3.x的新式类和经典类的区别:在python3.x中定义类时,如果没有指定父类,默认会使用object作为该类的基类,definedpython3.x中的类都是新式类。在python2.x中定义类时,如果没有指定父类,则不会使用object作为基类。代码体验,如图:基于Python2.02。基于Python3.x,新式类和经典类在继承多重继承时会影响方法的查找顺序。注意:为了保证写的代码能同时运行在python2.x和python3.x上,以后定义类的时候,如果没有父类,建议继承自objectclass类名(object):pass更多相关Python教程可移至Python自学网(www.wakey.com.cn/)从基础入门免费课程开始,逐步深入学习python全栈系统课程,适合初学者掌握全栈开发。
