【发布时间】:2021-12-19 18:23:54
【问题描述】:
我有两个共享方法名称的父类。我想对它们进行子类化,并以不同的名称将它们的方法重新分配给子类。这很复杂,因为这些方法也使用具有共享名称的其他方法。人为但最小的例子:
class Foo1():
def __init__(self):
super().__init__()
def print(self):
print(self.get())
def get(self):
return 1
class Foo2():
def __init__(self):
super().__init__()
def print(self):
print(self.get())
def get(self):
return 2
class Foo(Foo1, Foo2):
def __init__(self):
super().__init__()
self.print1 = super().print
self.print2 = super(Foo1, self).print
foo = Foo()
foo.print1()
>>> 1
foo.print2()
>>> 1
在上面的例子中,foo.print1() 打印出 1,但是 foo.print2() 打印出 1 而不是 2。我想构造 Foo 使其调用 Foo2 的 print 和 get 方法,从而打印出 2。
我理解这是因为名称“self”实际上指向 Foo(),因此方法“print”和“get”指向 Foo1 的方法,因为 Foo1 在 MRO 中是第一个。
对于我的用例来说,Foo() 有“print”和“get”方法甚至没有意义,只有“print1”和“print2”。这让我怀疑我做错了。有没有更好的方法来构造一个从 Foo1 和 Foo2 正确继承这些方法的子类?
【问题讨论】:
-
你想要组合,而不是继承。
-
听起来你根本不想继承
-
@juanpa.arrivillaga 这就是我寻求指导的原因。我从未说过我“想要”继承。
标签: python multiple-inheritance method-resolution-order