Ich muss meine Bibliothek monkey-patch, um eine Instanz eines Symbols zu ersetzen, und es wird durch einige Funktion Schließungen referenziert. Ich muss diese Funktionen kopieren (da ich auch Zugriff auf die ursprüngliche ungepatchte Version der Funktion benötigen), aber __closure__
ist unveränderlich, und ich kann nicht copy.copy
es, also wie kann ich neue Schließzellenobjekte in Python 2.7 erstellen?Wie erstellt man neue Schließzellobjekte?
ich zum Beispiel angesichts dieser Funktion
def f():
def incorrectfunction():
return 0
def g():
return incorrectfunction()
return g
def correctfunction():
return 42
func = f()
patched_func = patchit(f) # replace "incorrectfunction"
print func(), patched_func()
Und ich will
0, 42
Ist 'functools.partial (f, 2)()' gut genug? –
Nein, weil ich es für Affe-Patching verwende. IE, ich muss "Patchit" -Funktion über alle Symbole ausführen, um das alte Symbol in Schließungen mit dem Affen-Patch-Symbol –
ersetzt Entschuldigung ich war nicht klar, ersetzt mein Spielzeug Beispiel mit einer realistischeren Version –