上一篇文章讲述了多继承的概念、语法、代码演练、应用注意事项,有趣味的能够看下,这篇文章是基于上篇文章的扩大科普,简略晓得一下就好。
一、Python中的MRO —— 办法搜寻程序【多继承程序】
所谓办法搜寻程序,就是让某个对象调用某个办法时,python的解释器是依照什么样的程序在创立这个对象的类,以及父类之间搜寻办法的。在python中针对类提供了一个内置属性 mro ,能够查看办法搜寻程序。(mro前后两个下划线)
MRO是 method resolution order缩写,次要用于在多继承时判断办法、属性的调用门路。
确定C类对象调用办法的程序:上篇文章中代码不变,在前面输入:print(C.__mro__)
具体代码:
class A: def test(self): print("A --- test办法") def demo(self): print("A --- demo办法")class B: def demo(self): print("B --- demo办法") def test(self): print("B --- test办法")class C(B, A): pass# 创立子类对象c = C()c.test()c.demo()print(C.__mro__)
执行后果:
后果过程阐明:
在控制台输入了一个元组。当让C类创立的对象办法时,Python解释器会首先在C类中查找有没有这个办法,如果有就会间接执行,而不会向后搜寻。如果没有找到这个办法,就会依照元组的程序从左向右查找第二个类中是否有这个办法,如果在B类中找到就会间接执行也不会向后搜寻。如果没有找到就会依照从左向右的程序持续向下寻找,在第三个类中A类中持续查找有没有提供这个办法,如果找到就执行,如果没有找到持续向后寻找下一个类object类,如果还没找到程序就会报错。
(在python3中object是所有类的基类,也就是只有定义一个类,这个类的最终基类都是object类,简略来讲object是python中所有类的祖宗类)
总结:
在搜寻办法时,是依照__mro__ 的输入后果从左向右的程序查找的
如果在以后类中找到办法,就间接执行,不再搜寻如果没有找到,就查找下一个类中是否有对应的办法,如果找到,就间接执行,不再搜寻
如果找到最初一个类,还没有找到办法,程序报错
二、旧式类和新式(经典)类【科普】
object是python为所有对象提供的基类,提供一些内置的属性和办法,能够应用dir函数来查看。
旧式类:
以object为基类的类,举荐应用。
经典类:
不以object为基类的类,不举荐应用。
旧式类和经典类在python2.x和Python3.x之间的区别:
在python3.x中定义类时,如果没有指定父类,会默认应用object作为该类的基类,python3.x中定义的类都是旧式类。 在python2.x中定义类时,如果没有指定父类,则不会以object为基类。
代码体验,如图:
- 基于Python2.0
2.基于Python3.x
旧式类和经典类在多继承时,会影响到办法的搜寻程序。留神:为了保障编写的代码可能同时在python2.x和python3.x运行,今后在定义类时,如果没有父类,倡议对立继承自object
class 类名(object): pass
更多相干Python教程能够移步去Python自学网(www.wakey.com.cn/)从根底入门收费课程开始,逐渐深刻学习python全栈体系课程,适宜新手入门到精通全栈开发。