Я занимаюсь рефакторингом структуры классов в Python и столкнулся с проблемой рекурсии при динамическом создании экземпляров подклассов из базового класса. Изначально у меня был базовый класс генератора (BaseGenerator) и несколько дочерних классов генераторов (ChildGenerator1, ChildGenerator2, ChildGenerator3). Моя цель - вызывать только BaseGenerator, который внутренне должен определять и возвращать правильный экземпляр дочернего генератора.
я попытался реализовать логику в методе
__new__
класса BaseGenerator:
class BaseGenerator:
def __new__(cls, *args, **kwargs):
if cls is BaseGenerator:
subclass = cls._determine_subclass(*args, **kwargs)
return subclass(*args, **kwargs)
else:
return super().__new__(cls)
@staticmethod
def _determine_subclass(*args, **kwargs):
# Логика определения подходящего подкласса
# ...
class ChildGenerator1(BaseGenerator):
pass
class ChildGenerator2(BaseGenerator):
pass
class ChildGenerator3(BaseGenerator):
pass
Однако этот подход привел к проблеме рекурсии при создании экземпляра подкласса.
Я ищу предложения или советы о том, как правильно реализовать этот паттерн на Python. Как я могу изменить свой подход для динамического создания правильного подкласса из BaseGenerator ?