加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Python中的OOPs范例

发布时间:2020-12-14 05:52:18 所属栏目:Java 来源:网络整理
导读:这是我一直怀疑的事情.请考虑以下代码段. 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): passc = C()c.setup() 现在这给出了输出, inside binside a 通过pdb
这是我一直怀疑的事情.请考虑以下代码段.
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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读