Python:子类中的重写方法跳过基类之一
我有两个基类Python:子类中的重写方法跳过基类之一,python,class,oop,overriding,Python,Class,Oop,Overriding,我有两个基类A和B,每个基类都有一个方法myfunc,可以打印出不同的字符 A类: def myfunc(自我): 打印('A') B类: def myfunc(自我): 打印('B') 我还有一个类C,它继承自A和B。在C类中,我覆盖了myfunc并调用了super C类(B、A): def myfunc(自我): super().myfunc() 现在,如果我执行下面的代码,它只打印一个字符 x=C() x、 myfunc() 输出: B 我尝试了print(C.\uu mro\uu
A
和B
,每个基类都有一个方法myfunc
,可以打印出不同的字符
A类:
def myfunc(自我):
打印('A')
B类:
def myfunc(自我):
打印('B')
我还有一个类C
,它继承自A
和B
。在C类
中,我覆盖了myfunc
并调用了super
C类(B、A):
def myfunc(自我):
super().myfunc()
现在,如果我执行下面的代码,它只打印一个字符
x=C()
x、 myfunc()
输出:
B
我尝试了print(C.\uu mro\uuuu)
,这给了我(,)
,所以它应该转到A类
并打印字符A
。对吧?
另外,如果我像C(A,B)
那样切换继承顺序,并使用相同的代码,它将跳过类B
我的问题:
A
和B
中执行myfunc
方法myFunc
,因为python在调用super.myFunc()
时所做的是在所有基类(在本例中是B
和A
)中搜索名为myFunc
的第一个函数,并且它是按顺序执行的,因此它首先在类B
中查找myFunc>。因此,因为类B
python中有一个名为myFunc
的函数,所以请停止搜索并仅执行该函数
回答问题2:
有一种简单的方法可以做到这一点:
A类:
def f(自我):
打印('A')
B类:
def f(自我):
打印('B')
C类(B、A):
def f(自我):
A.f(自我)
B.f(自我)
c=c()
c、 f()
基本上,您可以调用任何类的任何函数,然后将实例作为第一个参数传递(self
)。我相信你不能只用一次调用就同时执行两个函数,你需要为每个函数调用一次