siroBS
@siroBS
Full Stack Developer

Как сделать подобие «Фабрики» для поддержки своеобразных «Конфигураций» с такими особенностями наследования?

Допустим, имеется несколько файлов:
scheme.py
scheme.One.py
scheme.Two.py
scheme.*.py
***

В файле scheme.py объявлен класс Scheme со всеми необходимыми, в общем случае, атрибутами:
class Scheme:
    _VAR = 'Common Scheme Class'
    def function_common(self):
        return 'Function Common'
    def function_first(self):
        return 'Function First'
    def function_second(self):
        return 'Function Second'


Для простоты поддержки конфигураций, в файлах, изменяющих поведение класса Scheme, будет примерно следующее:
Файл scheme.One.py:
class Scheme:
    _VAR = 'One Scheme Class'
    def function_first(self):
        return 'Function One'


Файл scheme.Two.py:
class Scheme:
    _VAR = 'Two Scheme Class'
    def function_second(self)
        return 'Function Two'


Такое решение не подходит (классическое наследование):
В файлах-шаблонах (scheme.One.py, scheme.Two.py и т.д.) можно было бы наследоваться от общего класса Scheme со всеми возможно-необходимыми атрибутами и переопределить необходимые, например:
class SchemeOne(Scheme):
    _VAR = 'One Scheme Class'
    def function_second(self):
        return 'Function Seconf Two Scheme Class'
    def function_third(self):
        return 'Function Third'


Я же хочу, чтобы в каждом файле был класс, именно, с именем "Scheme", для простоты реализации поддержки шаблонов-модулей конечными пользователями. В таком случае, один из методов класса Scheme мог бы обходить все такие файлы и выбрав один для переопределения базового класса (пусть даже, только на основании атрибута _VAR), заменять из него необходимые (присутствующие в выбранном файле расширения) атрибуты в исходном классе Scheme и возвращать итоговый класс.
На StackOverflow мне посоветовали, по-сути, "Фабрику классов"... Что есть хорошо... Но немного другое...
Если я правильно понимаю, мне нужно ручками выдирать атрибуты из одного и пихать их в другой класс - как сделать такой функционал?
Или я изобретаю велосипед? Может кто-то видит эту картину по-другому?
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы