java – Python中的OOPs范例
这是我一直怀疑的事情.请考虑以下代码段.
class A(object): def check(self): super(A,self).check() print "inside a" class B(object): def check(self): print "inside b" class C(A,B): pass c = C() c.setup() 现在这给出了输出, inside b inside a 通过pdb传递这个,我看到在到达A.setup()时,正在调用B.setup().但是,来自A的调用是对其超类的检查方法;因为它不存在,所以调用从那一点移动到B.check(). >有人可以解释或指向一个文件,解释这是如何在内部工作的?我找不到任何东西. 非常感谢. 解决方法
该算法在
this excellent article中解释.
简而言之, super(A,self)在自我.__ class __.__ mro__中查看A之后的下一课. 在你的情况下,自我是c,所以自我.__ class__是C. 因此,就属性查找而言,super(A,self)返回一个行为类似于B的超级对象. super(A,self).check()因此调用B.check(). 0700由Michele Simionato在this essay中更详细地描述了用于生成MRO(方法解析顺序)的The C3 algorithm. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |