Hi everyone, This is my first question here. Hope to get some clarification. Basically this question is about multiple inheritance and the usage of super().__init__ in parent classes.
So I have two classes that inherit from the same base class. For example class B and class C inherit from A: class A: def __init__(self, arg1): pass class B(A): def __init__(self, arg2): super().__init__(arg2) class C(A): def __init__(self, arg1, arg2): super().__init__(arg2) Now I would like to create a new class D that inherits from B and C. One note, D is the only class that I am "allowed" to change. A, B and C are provided to me as is from an external package. class D(B, C): def __init__(self): B.__init__(self, 'arg1') C.__init__(self, 'arg1', 'arg2') When I initialize D I get a TypeError. TypeError: __init__() missing 1 required positional argument: 'arg2' I get it from the invocation of super().__init__(arg2) inside the B class. As I understand it, the super() inside B tries to call the __init__ of class C, because of the multiple inheritance and the MRO that is constructed. But when B was implemented it wasn't aware of C and I assume, B shouldn't be aware of C in any case. It gives me the feeling that I'm trying to implement some bad practice here, but I'm not sure why. I would also like to hear your suggestions if there is a way to circumvent it. Maybe by the approach described here: https://rhettinger.wordpress.com/2011/05/26/super-considered-super/ wrapping B and C in some Adapter class. Thanks for reading and any help. -- https://mail.python.org/mailman/listinfo/python-list