摘要: 转载自:http://blog.sina.com.cn/s/blog_45ac0d0a01018488.htmlmro即method resolution order,主要用于在多继承时判断调的属性的路径(来自于哪个类)。之前查看了很多资料,说mro是基于深度优先搜索算法的。但不完全正确在Python2.3之前是基于此算法,但从Python2.3起应用了新算法:C3算法。为什么采用C3算法C3算法最早被提出是用于Lisp的,应用在Python中是为了解决原来基于深度优先搜索算法不满足本地优先级,和单调性的问题。本地优先级:指声明时父类的顺序,比如C(A,B),如果访问C类对象属性时,应该根据声 阅读全文
posted @ 2013-08-26 22:47 martine 阅读(557) 评论(0) 推荐(0) 编辑
摘要: 深入super一下内容引用自:http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html,写的挺好的。代码段3class A(object): # A must be new-style class def __init__(self): print "enter A" print "leave A"class B(C): # A --> C def __init__(self): print "enter B" super(B, self).__init_ 阅读全文
posted @ 2013-08-26 22:22 martine 阅读(1603) 评论(0) 推荐(0) 编辑
摘要: 在python中,要调用父类的某个方法,python2.2之前需要如下代码:class A:def __init__(self): print "enter A" print "leave A"class B(A):def __init__(self): print "enter B" A.__init__(self) print "leave B">>> b = B()enter Benter Aleave Aleave B观察类B,在使用A的__init__方法的时候,我们需要直接使用类的名字 阅读全文
posted @ 2013-08-26 22:06 martine 阅读(626) 评论(0) 推荐(0) 编辑
摘要: 最近在学习python的多重继承。先来了解下多重继承的概念,所谓多重继承,是指python的类可以有两个以上父类,也即有类A,类B,类C,C同时继承类A与类B,此时C中可以使用A与B中的属性与方法。那么问题来了,如果A与B中具有相同名字的方法,这个时候python怎么调用的会是哪个方法呢?举个例子:class A(object):def __init__(self): pass def foo(self): print 'A foo'class B(object):def __init__(self): pass def foo(self): print 'B foo& 阅读全文
posted @ 2013-08-26 21:38 martine 阅读(19767) 评论(0) 推荐(0) 编辑