So habe ich eine Python-Anwendung, die diese Funktionalität hat, wo modulähnliche Datei im Unterverzeichnis extensions
des Programmverzeichnisses zu einem frühen Zeitpunkt in der Initialisierung der Anwendung importiert wird.Monkey Patch das Modul, das dieses ein importiert
Das sieht etwa so aus (nehme an, dies ist my_application.py
):
def do_init():
for thefname in glob.iglob(os.path.join(".","extensions","*")):
SourceFileLoader(os.path.basename(thefname),thefname).load_module()
#do other init stuff...
if __name__ == "__main__":
do_init()
do_cool_things()
Nun, ich möchte in der Lage sein, eine Py-Datei haben in dieser Erweiterungen Verzeichnis, das etwas geht:
import my_application
def my_cool_things():
print("The original things have been overridden.")
my_application.do_cool_things = my_cool_things
Und das funktioniert ... für zukünftige Importe von my_application
. Aber der do_cool_things
Anruf innerhalb der if __name__ == "__main__"
Wache zeigt das ursprüngliche Verhalten. Warum passiert das und wie kann ich diesen Aufruf das modifizierte Verhalten zeigen lassen?
Das funktioniert! Und hier versuche ich, die Funktionen des Moduls zu erreichen, indem ich den Stapel durch die Import-Maschinen abwickle ...: P – Schilcote