我有两个基类A,B每个基类都有一个方法myfunc,它打印出不同的字符。class A: def myfunc(self): print('A')class B: def myfunc(self): print('B')我还有一个class C继承自A和B两者的。在class C我已经覆盖myfunc并调用super它。class C(B, A): def myfunc(self): super().myfunc()现在,如果我执行以下代码,它只打印一个字符x = C()x.myfunc()输出:B我试过print(C.__mro__)这给了我(<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)所以它也应该去class A打印字符A。正确的?另外,如果我像这样切换继承顺序C(A,B)并使用相同的代码,则会跳过class B。我的问题:为什么会跳过class A?如何 在两个类中执行myfunc方法AB我查阅了 类似的讨论,但发现它令人困惑。
1 回答
![?](http://img1.sycdn.imooc.com/545863e80001889e02200220-100-100.jpg)
达令说
TA贡献1821条经验 获得超6个赞
回答问题1:
它会跳过myFuncA 类,因为当您调用时,pythonsuper.myFunc()会搜索myFunc所有基类中具有名称的第一个函数(在本例中为B和A),并且它按顺序执行此操作,因此它首先myFunc在 class 中查找B。因此,因为pythonmyFunc类中有一个名为的函数,所以停止搜索并仅执行该函数。B
回答问题2:
有一个简单的方法可以做到这一点:
class A:
def f(self):
print('A')
class B:
def f(self):
print('B')
class C(B, A):
def f(self):
A.f(self)
B.f(self)
c = C()
c.f()
基本上,您可以调用任何类的任何函数,然后将实例作为第一个参数 ( self) 传递。我相信您无法仅通过一次调用来执行这两个函数,您需要对每个函数进行一次调用。
添加回答
举报
0/150
提交
取消