java – Python中的OOPs范例

前端之家收集整理的这篇文章主要介绍了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().

>有人可以解释或指向一个文件,解释这是如何在内部工作的?我找不到任何东西.
>有人可以在C / Java中向我展示类似的实现吗?我认为将它与其他语言进行比较可以帮助我更好地理解手头的问题.

非常感谢.

解决方法

该算法在 this excellent article中解释.

简而言之,

super(A,self)在自我.__ class __.__ mro__中查看A之后的下一课.

在你的情况下,自我是c,所以自我.__ class__是C.
C .__ mro__是[C,A,B,object].所以A之后的MRO中的下一个类恰好是B.

因此,就属性查找而言,super(A,self)返回一个行为类似于B的超级对象.

super(A,self).check()因此调用B.check().

0700由Michele Simionato在this essay中更详细地描述了用于生成MRO(方法解析顺序)的The C3 algorithm.

猜你在找的Java相关文章