I have two classes A and B and both have a method get_type() that returns a string and which is called in the __init__() of both classes to set an instance attribute self.type. Now there's a child class that inherits from both A and B and in it's __init__() it takes an instance of either A or B as an argument. Depending on whether it's instantiated with an instance of A or B, I call the corresponding __init__() of the parent. Presumably because of the lookup order of multiple inheritance, always the get_type() method of the A parent is called, even if C is instantiated with an instance of B. See code below:
class A:
def __init__(self):
self.type = self.get_type()
def get_type(self):
return 'A'
class B:
def __init__(self):
self.type = self.get_type()
def get_type(self):
return 'B'
class C(A, B):
def __init__(self, instance):
if isinstance(instance, A):
A.__init__(self)
print('Inheriting from A')
else:
B.__init__(self)
print('Inheriting from B')
a = A()
b = B()
c = C(b)
print(a.type, b.type, c.type)
>>> Inheriting from B
>>> A B A
So I want that c.type is 'B' since it inherited from the B class. Can I maybe use the super() function to get the behaviour I want?