У меня есть два разных класса:
class MyClass1:
def __init__(self, x):
self.x = x #x is expected to be a float
def method1(self):
#do something here
class MyClass2:
def __init__(self, s):
self.s = s # s is expected to be a string
def method2(self):
#do something here
Я хотел бы получить фабричный класс, который становится равным MyClass1
или MyClass2
в зависимости от входа.Я попытался:
class MyMainClass(arg):
def __new__(cls, arg):
if isinstance(arg, float):
return MyClass1(arg)
elif isinstance(arg, str):
return MyClass2(arg)
else:
raise TypeError("either float or str")
Это работает, но у меня есть другой класс детей от MyMainClass
:
class Children(MyMainClass):
def __init__(self, x_or_s):
pass
def method3(self):
#do something
Таким образом, Children
становится MyClass1
или MyClass2
экземпляр и не видит method3
.Как мне изменить мой код?Я подозреваю, что мне нужно изменить метод Children.__new__
.