【发布时间】:2020-07-22 18:27:33
【问题描述】:
考虑以下类,其中P1 和P2 是C 的父类:
class P1:
def f(self):
print('P1')
class P2:
def f(self):
print('P2')
class C(P1, P2):
def f(self):
print('C')
# super().f()
# super(P1, self).f()
c = C()
c.f()
当我运行它时,它会打印出C。
如果我取消注释第一行 super().f(),那么它也会打印 P1
因为super() 会调用直接父级P1 的方法
如果我取消注释第二行super(P1, self).f(),那么它也会打印P2
因为super(P1, self) 会调用P1 的兄弟P2 的方法
我想知道的是,如果有任何方法可以从父类P1 和P2 调用f 方法,只需调用super() 函数,而不是调用它两次我做到了。
或者,有没有其他方法可以在不使用super 函数的情况下做到这一点?
【问题讨论】:
-
没有语言功能可以做到;这是一个不寻常的愿望。对于您确实想在所有父类中调用重写方法的极少数情况,最好明确地这样做:它更具可读性,并且行为(例如排序)将被明确定义。
-
@jamesdlin 感谢您的反馈。我只是好奇而已。这不是我“想要”的。
标签: python python-3.x overriding multiple-inheritance super