python 之 多继承的顺序
(2013-12-20 14:25:10)
标签:
python多继承多继承顺序顺序 |
分类: python/Django |
python 支持多继承,但对与经典类和新式类来说,多继承查找的顺序是不一样的。
d = D()
d.foo() # 输出 p1-foo
d.bar() # 输出 p2-bar
d=D()
d.foo() # 输出 p1-foo
d.bar() # 输出 c2-bar
| |
新式类 |
| class class class class |
class class class class class |
1. 经典类
实例d调用foo()时,搜索顺序是 D => C1 => P1
实例d调用bar()时,搜索顺序是 D => C1 => P1 => P2
换句话说,经典类的搜索方式是按照“从左至右,深度优先”的方式去查找属性。d先查找自身是否有foo方法,没有则查找最近的父类C1里是否有该方法,如果没有则继续向上查找,直到在P1中找到该方法,查找结束。
2. 新式类
实例d调用foo()时,搜索顺序是 D => C1 => C2 => P1
实例d调用bar()时,搜索顺序是 D => C1 => C2
可以看出,新式类的搜索方式是采用“广度优先”的方式去查找属性。
原文出处:
http://www.cnblogs.com/linyawen/archive/2012/04/25/2469538.html
另注:
Python的多继承类是通过mro的方式来保证各个父类的函数被逐一调用
print D.__mro__

加载中…