Обезьяна исправляет класс в другом модуле в 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.

Ответы на вопрос(6)

Ваш ответ на вопрос