gpt4 book ai didi

java - Python 中的 OOP 范式

转载 作者:太空狗 更新时间:2023-10-29 22:23:59 29 4
gpt4 key购买 nike

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

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 的调用是对其父类(super class)的检查方法;因为它不存在,调用从那个点移动到 B.check()。

  1. 有人可以解释一下或给我指点一份说明其内部工作原理的文档吗?我找不到任何东西。
  2. 有人可以用 C++/Java 向我展示类似的实现吗?我认为将它与其他语言进行比较会帮助我更好地理解手头的问题。

非常感谢。

最佳答案

该算法在 this excellent article 中进行了解释.

简而言之,

super(A,self)self.__class__.__mro__ 中查找 after A 的下一个类.

在你的例子中,selfc,所以 self.__class__CC.__mro__[C,A,B,object]。因此 MRO 中 A 之后的下一个类恰好是 B

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

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

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

关于java - Python 中的 OOP 范式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3175714/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com