Поскольку в вопросе нет актуального вопроса , я буду понимать его буквально:
Что не так делать динамически?
Ну, он практически нечитабелен, чрезвычайно непрозрачен и неочевиден для пользователя вашего кода (включая вас через месяц: P).
Исходя из моего опыта (весьма ограниченного, я должен признать, к сожалению, у меня нет 20-летнего опыта программирования), необходимость в таких решениях указывает на то, что структура классов не очень хорошо определена, - значит, есть почти всегда лучший, более читаемый и менее загадочный способ делать такие вещи.
Например, если вы действительно хотите определить базовые классы на лету, вам лучше использовать фабричную функцию, которая будет возвращать соответствующие классы в соответствии с вашими потребностями.
Еще один взгляд на вопрос:
Что не так делать динамически?
В вашей текущей реализации это выдает ошибку «превышена максимальная глубина рекурсии». Это происходит потому, что A.__new__
вызывает себя изнутри себя бесконечно (поскольку он наследует от себя и от B
).
10: Внутри A.__new__
для "cls" установлено значение <class '.A'>
. Внутри конструктора вы определяете класс C
, который наследуется от cls
(который на самом деле A
) и другого класса B
. При создании экземпляра C
вызывается его __new__
. Поскольку он не определяет свой собственный __new__
, вызывается его базовый класс '__new__
. Базовый класс, как оказалось, A
.
20: GOTO 10