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

Я могу'• изменить файлы третьего стороннего модуля * .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)

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