Affe Patchen einer Klasse in einem anderen Modul in Python

Ich arbeite mit einem Modul, das von jemand anderem geschrieben wurde. Ich würde gerne den Affen patchen__init__ Methode einer im Modul definierten Klasse. Die Beispiele, die ich gefunden habe, um zu zeigen, wie man das macht, haben alle angenommen, ich würde die Klasse selbst anrufen (z.Affen-Patch-Python-Klasse). Dies ist jedoch nicht der Fall. In meinem Fall wird die Klasse innerhalb einer Funktion in einem anderen Modul initialisiert. Siehe das (stark vereinfachte) Beispiel unten:

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()

Gibt es eine Möglichkeit, das zu ändern?__init__ Methode vonSomeClass so dass wenndosomething wird von mymodule.py aufgerufen, gibt beispielsweise 43 statt 42 aus? Idealerweise würde ich die bestehende Methode einpacken können.

Ich kann die Third-Party-Modul * .py-Dateien nicht ändern, da andere Skripte von der vorhandenen Funktionalität abhängen. Ich möchte lieber keine eigene Kopie des Moduls erstellen, da die Änderung, die ich vornehmen muss, sehr einfach ist.

Bearbeiten Sie 2013-10-24

Im obigen Beispiel habe ich ein kleines, aber wichtiges Detail übersehen.SomeClass wird importiert vonthirdpartymodule_b so was:from thirdpartymodule_a import SomeClass.

Um den von F.J vorgeschlagenen Patch zu machen, muss ich die Kopie in ersetzenthirdpartymodule_b, eher, alsthirdpartymodule_a. z.B.thirdpartymodule_b.SomeClass.__init__ = new_init.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage