[英]Python: Overriding method in child class skipping one of the Base Class
我有两个基类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
?A
类和B
类中执行myfunc
方法我查找了类似的讨论,但发现它令人困惑。
回答问题1:
它跳过类 A 上的myFunc
因为当您调用super.myFunc()
时,python 所做的是在所有基类(在本例中为B
和A
)中搜索名称为myFunc
的第一个函数,并按顺序执行此操作,因此它首先在B
类中查找myFunc
。 因此,因为B
类中有一个名为myFunc
的函数,所以 python 停止搜索并仅执行该函数。
回答问题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
)传递。 我相信你不能只用一个调用来执行这两个函数,你需要为每个函数调用一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.