Общий вопрос по Python
Я импортирую библиотеку Python (назовите animals.py) со следующей структурой класса:
class Animal(object): pass
class Rat(Animal): pass
class Bat(Animal): pass
class Cat(Animal): pass
...
Я хочу добавить родительский класс (Pet
) для каждого из классов видов (Rat
, Bat
, Cat
, ...);однако, я не могу изменить фактический источник библиотеки, которую я импортирую, поэтому это должно быть изменение во время выполнения.
Кажется, работает следующее:
import animals
class Pet(object): pass
for klass in (animals.Rat, animals.Bat, animals.Cat, ...):
klass.__bases__ = (Pet,) + klass.__bases__
Это лучший способ внедрить родительский класс в дерево наследования в Python без внесения изменений в определение источника изменяемого класса?
Мотивирующие обстоятельства
Я пытаюсь привить упорство в большую библиотеку, которая контролирует лабораторное оборудование.Возиться с этим невозможно.Я хочу дать ZODB Persistent
попытку.Я не хочу писать библиотеку оболочек mixin / фасадов, потому что я имею дело с более чем 100 классами и множеством импортов в коде моего приложения, которые необходимо обновить.Я тестирую варианты, взламывая только мою точку входа: настраивая БД, внося исправления, как показано выше (но вытягивая классы видов с интроспекцией в модуле животных вместо явного перечисления), затем закрывая БД при выходе.
Mea Culpa / Request
Это намеренно общий вопрос.Меня интересуют разные подходы к инъекции родителя и комментарии о плюсах и минусах этих подходов.Я согласен с тем, что такого рода чиканеринг во время выполнения может привести к действительно запутанному коду.Если я остановлюсь на ZODB, я сделаю что-то явное.На данный момент, как обычный пользователь python, меня интересует общий случай.