Class 使用super()将参数传递给右侧继承的类

Class 使用super()将参数传递给右侧继承的类,class,python-3.x,Class,Python 3.x,假设一个类继承两个类:一个接受一个参数,另一个不接受。 如何确保将参数传递给接受参数的类,而不受子类顺序的影响 具体来说,我对这个例子有一些问题: class Generic(object): def __init__(self,data): self.data=data def do_data(self): print(self.data) class Generic2(object): def __init__(self):

假设一个类继承两个类:一个接受一个参数,另一个不接受。 如何确保将参数传递给接受参数的类,而不受子类顺序的影响

具体来说,我对这个例子有一些问题:

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参数导致的类型错误

使用以下方法可简单地纠正错误:

  ...
 class MyClass(Generic,Generic2):
  ...
我假设
super()
使用MRO来决定初始化哪个类

问题是:在Python3中,如何确保参数被发送到正确的子类,而不受子类顺序的影响

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

相关:

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

class MyClass(Generic2, Generic):
    def __init__(self, data):
        Generic.__init__(data)
        self.data = data
相关:

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

class MyClass(Generic2, Generic):
    def __init__(self, data):
        Generic.__init__(data)
        self.data = data

有一点扩展和注释对于注释来说太长:

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


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

有一点扩展和注释对于注释来说太长:

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


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

而是阅读解决问题的方法,而不是抱怨;)简短的版本:接受你不能控制(大部分)顺序,接受一个一致的接口和一个通用的基类简短的版本:接受你不能控制(大部分)订单的事实,接受一个一致的接口和一个通用的基类。谢谢!这是有道理的。非常感谢您的解释,谢谢!这是有道理的。非常感谢你的解释。