假设一个类继承了2个类:一个接受1个参数,另一个接受none。 如何确保将参数传递给接受参数的类,而不依赖于子类的顺序?
具体来说,我对这个例子有疑问:
class Generic(object):
def __init__(self,data):
self.data=data
def do_data(self):
print(self.data)
class Generic2(object):
def __init__(self):
pass
def no_data(self):
print("No_data")
class MyClass(Generic2,Generic):
def __init__(self,data):
self.data=data
super().__init__(data)
A=MyClass("A")
由于 init 参数而返回TypeError。
使用以下命令纠正错误:
...
class MyClass(Generic,Generic2):
...
我假设super()
使用MRO来决定要初始化哪个类。
问题是:在Python3中,我如何确保将参数发送到正确的子类,而不依赖于我的子类的顺序?
(温柔......我对OO的任何事情都有非常不稳定的知识!)
答案 0 :(得分:3)
相关:https://fuhm.net/super-harmful/。
只需使用您想直接初始化的课程:
class MyClass(Generic2, Generic):
def __init__(self, data):
Generic.__init__(data)
self.data = data
答案 1 :(得分:1)
对于评论而言,某些扩展和评论太长了:
当您确切知道类层次结构的外观时,可以直接调用要调用的方法。当您不确定类层次结构的外观时,必须使用super()。例如,当您创建库时就是这种情况。您不知道人们将如何使用该库以及他们将使用哪些基类。所以你需要确保所有类的接口都相同,并且所有类都调用super()。
但是只要类的接口不相同,super()就会停止变得有用,部分原因是你不再能以任意顺序调用类。您现在必须按特定顺序初始化它们,然后您必须明确该命令。