类的多重继承
当构建一个类时,如果来自于多个父类,那么就需要考虑类的多重继承。python中类有经典类和新式类之分,两种类的多重继承方法存在差异。
经典类
在Python中,经典类出现在python早期的版本,搜索属性时按深度优先搜索。当一个类来源于多个父类时,优先从左到右搜索,在搜索第一个父类时,若其中没有对应属性,会继续搜索该父类所继承的父类,直至搜索结束,然后才去搜索第二个继承的类,示例如下。
从上面的运行结果可以看出,在调用show属性时,优先查找B类,找到之后输出B;在调用shew时,优先查找B类,没有的话去搜索B类的父类A,找到后输出A2;在整个过程中,没有去搜索C类。
新式类
对于新式类而言,搜索属性时按广度优先搜索,也就是会优先去搜索统计的父类,找到之后运行,找不到在去考查第二层的父类,具体见以下实例,类的定义和上面一样。
从上述代码可以看出,通过可以输出D类的继承顺序,也就是D-->B-->C-->A-->object;从输出结果来看,test.show()在执行时输出的是B,运行的是B类中定义的show,test.shew()在执行时输出的是C,运行的是C类中定义的shew,此处并不向经典类中去调用A.show(),而是调用C.show(),由此可以看出是按广度搜索,B类中没有对应的object时,下一个搜索C类,C类中没有的话再找B、C继承的父类:A。
以上就是在类的多重继承特性,主要是由于类的类别不同,导致继承时搜索的顺序不同,在python2中,2.2版本引入新式类概念,但是默认采用的类定义方法为经典类,python3默认的是新式类,这点需要特别注意。
领取专属 10元无门槛券
私享最新 技术干货