Я написал класс миксина, предназначенный для наложения поверх класса нового стиля, например, через
class MixedClass(MixinClass, BaseClass):
pass
Как проще всего применить этот миксин к классу в старом стиле? Он использует вызов super
в своем методе __init__
, так что, по-видимому, это (?) должно измениться, но в противном случае я хотел бы внести как можно меньше изменений в MixinClass
. Я должен быть в состоянии получить подкласс, который вносит необходимые изменения.
Я рассматриваю возможность использования декоратора класса поверх класса, полученного из BaseClass
, например.
@old_style_mix(MixinOldSchoolRemix)
class MixedWithOldStyleClass(OldStyleClass)
где MixinOldSchoolRemix
является производным от MixinClass
и просто повторно реализует методы, использующие super
, чтобы вместо этого использовать переменную класса, содержащую класс, с которым она смешана, в данном случае OldStyleClass
. Эта переменная класса будет установлена old_style_mix
как часть процесса микширования.
old_style_mix
просто обновит словарь классов, например. MixedWithOldStyleClass
с содержимым словаря класса mixin (например, MixinOldSchoolRemix
).
Это разумная стратегия? Есть ли способ лучше? Похоже, это будет распространенная проблема, учитывая, что существует множество доступных модулей, все еще использующих классы старого стиля.