Python中的OOP范例

时间:2010-07-04 18:19:22

标签: java c++ python 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()

现在这给出了输出

inside b
inside a

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

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

1 个答案:

答案 0 :(得分:9)

该算法在this excellent article中解释。

简而言之,

super(A,self)self.__class__.__mro__中查找 A之后的下一个课程

在您的情况下,selfc,因此self.__class__CC.__mro__[C,A,B,object]。因此A恰好是B之后MRO中的下一个课程。

所以super(A,self)返回一个super对象,就属性查找而言,其行为与B相同。

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

The C3 algorithm Python用于生成MRO(方法解析顺序)也在Michele Simionato的this essay中进行了更详细的描述。