Обезьяна исправляет класс в другом модуле в Python
Я работаю с модулем, написанным кем-то другим. Я хотел бы, чтобы обезьяна исправила__init__
метод класса, определенного в модуле. Все примеры, показывающие, как это сделать, предполагали, что я сам буду звонить в этот класс (например,Обезьяна-патч класс Python). Однако, это не так. В моем случае класс инициализируется внутри функции в другом модуле. Смотрите (очень упрощенный) пример ниже:
thirdpartymodule_a.py
class SomeClass(object):
def __init__(self):
self.a = 42
def show(self):
print self.a
thirdpartymodule_b.py
import thirdpartymodule_a
def dosomething():
sc = thirdpartymodule_a.SomeClass()
sc.show()
mymodule.py
import thirdpartymodule_b
thirdpartymodule.dosomething()
Есть ли способ изменить__init__
методSomeClass
так что когдаdosomething
вызывается из mymodule.py это, например, печатает 43 вместо 42? В идеале я бы смог обернуть существующий метод.
Я не могу изменить файлы Third.Pymodule * .py, так как другие скрипты зависят от существующей функциональности. Я бы предпочел не создавать свою собственную копию модуля, так как изменения, которые мне нужно сделать, очень просты.
Изменить 2013-10-24
Я упустил из виду небольшую, но важную деталь в приведенном выше примере.SomeClass
импортируетсяthirdpartymodule_b
нравится:from thirdpartymodule_a import SomeClass
.
Чтобы сделать патч, предложенный F.J, мне нужно заменить копию вthirdpartymodule_b
, скорее, чемthirdpartymodule_a
, напримерthirdpartymodule_b.SomeClass.__init__ = new_init
.