gpt4 book ai didi

python - 了解 super 的工作原理

转载 作者:太空宇宙 更新时间:2023-11-04 03:42:19 24 4
gpt4 key购买 nike

<分区>

下面给出python程序。

class FooBase(object):
def foo(self): pass

class A(FooBase):
def foo(self):
super(A, self).foo()
print 'A.foo()'

class B(FooBase):
def foo(self):
super(B, self).foo()
print 'B.foo()'

class D(B):
def foo(self):
super(D, self).foo()
print 'D.foo()'


class C(A,D,B):
def foo(self):
super(C, self).foo()
print 'C.foo()'

c=C()
c.foo()

输出是

B.foo()
D.foo()
A.foo()
C.foo()

但是当我在程序下面运行时

class A1(object):
def get(self):
print 'A1'
class A2(object):
def get(self):
print 'A2'
class A3(object):
def get(self):
print 'A3'
class B2(A2):
def get(self):
super(B2,self).get()
print 'b2'
class B3(A3):
def get(self):
super(B3,self).get()
print 'b3'
class C3(B3):
def get(self):
super(C3,self).get()
print 'c3'
class Foo(C3, A1, B2):
def get(self):
super(Foo,self).get()
print 'Foo'



#print Foo.__mro__
Foo().get()

当我执行上面的命令时,我得到如下输出

输出

A3
b3
c3
Foo

问题是为什么A1.get()B2.get()没有被调用,super的调用有什么问题吗?

我期待输出

A3
b3
c3
A1
A2
b2
Foo

编辑:如果有人能解释一下第一个和第二个例子之间的区别就太好了:)

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