Шаблон стратегии / фабрики Python 3: введите экземпляр класса, который динамически наследует реализации одного или нескольких абстрактных типов классов. - PullRequest
0 голосов
/ 01 февраля 2019

Я пишу следующую структуру классов:

class genericCar(ABC):
      baseCarMethodA()

class specificCar(genericCar):
      specificCarMethodB()

class genericEngine(ABC):
      baseEngineMethodA()

class specificEngine(genericEngine):
      specificEngineMethodA()

Я хочу создать контейнерный объект, который динамически наследуется от множества различных классов, таких как specificCar и specificEngine, и других, для создания объекта, который содержитих методы и поля.

Я делаю это, выбирая реализацию универсальных типов классов, которые объект должен наследовать через строковое имя:

def getBuiltCar(genericCar, genericEngine):
    class carFactory(genericCar, genericEngine):
        def __init__(self):
            pass
    return builtCar

Идея состоит в том, чтобы построить объект (автомобиль) который наследуется от (concreteImplofGenericTypeA, concreteImplofGenericTypeB и т.,Так что по сути это фабрика динамического смешивания.

Как мне работать с системой типизации Python, чтобы обеспечить правильные подсказки типов для pycharm для правильного автозаполнения методов и полей из динамически унаследованных конкретных классов?Или я все об этом говорю не так?

1 Ответ

0 голосов
/ 17 мая 2019

Возможно, вы захотите использовать что-то более близкое к шаблону создания построителя или потенциально шаблону создания прототипа .

Вместо динамического множественного наследования вы агрегируетешины, рама, двигатель и т. д. в качестве компонентов, и выставить их в качестве экземпляра автомобиля.Этому экземпляру машины не обязательно нужны подтипы.

...