Python中的OOP范例

6 c++ python java oop

这是我一直怀疑的事情.请考虑以下代码段.

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()
Run Code Online (Sandbox Code Playgroud)

现在这给出了输出,

inside b
inside a
Run Code Online (Sandbox Code Playgroud)

通过pdb传递这个,我看到在到达A.setup()时,正在调用B.setup().但是,来自A的调用是对其超类的检查方法; 因为它不存在,所以调用从那一点移动到B.check().

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

非常感谢.

unu*_*tbu 9

优秀文章解释了该算法.

简而言之,

super(A,self)看起来self.__class__.__mro__下一班 A.

在你的情况下,selfc,self.__class__是的C. C.__mro__[C,A,B,object].因此,MRO中的下一课A恰好是B.

因此super(A,self)返回一个super对象,其行为与B属性查找有关.

super(A, self).check()因此打电话B.check().

用于生成MRO(方法解析顺序)的C3算法在Michele Simionato的这篇文章中也有更详细的描述.