繁体   English   中英

在python中,为什么super具有多重继承行为?

[英]In python why does super behave this way with multiple inheritance?

因此,我们在下面有一个代码段。 我不明白为什么会这样。 为什么super(B, self).go()解析为C类的go方法?

class A(object):
    def go(self):
        print("go A go!")

class B(A):
    def go(self):
        super(B, self).go()
        print("go B go!")

class C(A):
    def go(self):
        super(C, self).go()
        print("go C go!")

class D(B, C):
    def go(self):
        super(D, self).go()
        print("go D go!")

d = D()
d.go()
# go A go!
# go C go!
# go B go!
# go D go!

尽管其名称很高,但super不一定是指超类。 super(B, self)self的MRO中紧随B

您可以看到D的MRO

>>> D.__mro__
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>)

这意味着从d.gosuper(D, self)指向B 结果调用B.gosuper(B, self)引用C而不是 A 这是因为self仍然是D的实例,因此是D.__mro__决定接下来要调用的内容,而不是B的静态超类。

要记住,最重要的super是里面Foo.go ,你不知道什么类super(Foo, self)将会参考,因为你不知道self是一个实例Foo或后代Foo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM