0

假设一个类继承了 2 个类:一个有 1 个参数,另一个没有。如何确保将参数传递给独立于子类顺序的接受参数的类?

具体来说,我对这个例子有疑问:

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 中,如何确保将参数发送到正确的子类,而与子类的顺序无关?

(温柔点......我对任何事情都非常了解!)

4

2 回答 2

3

相关:https ://fuhm.net/super-harmful/ 。

只需使用您要直接初始化的类:

class MyClass(Generic2, Generic):
    def __init__(self, data):
        Generic.__init__(data)
        self.data = data
于 2012-05-12T21:37:47.947 回答
1

一些扩展和评论对于评论来说太长了:

当您确切知道类层次结构的外观时,您可以直接调用要调用的方法。当您不确定类层次结构的外观时, super() 是必需的。例如,当您创建一个库时就是这种情况。您不知道人们将如何使用该库以及他们将使用您的哪些基类。因此,您需要确保所有类的接口都相同,并且所有类都调用 super()。

但是一旦类的接口不一样, super() 就不再有用了,部分原因是你不能再以任意顺序调用类。您现在必须按特定顺序初始化它们,然后您必须明确该顺序。

于 2012-05-13T08:03:39.447 回答