Динамическое наследование на основе аргумента в init - PullRequest
0 голосов
/ 05 июня 2018

У меня есть два разных класса:

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__.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...