Wie kann ich eine Konstante in einem importierten Python-Modul überschreiben?

8
___ answer12496167 ___

Ich bin mir nicht sicher, ob das genug ist oder nicht, aber hast du es versucht:

%Vor%

Stellen Sie sicher, dass Sie dies tun, bevor example importiert wird. Dies sollte funktionieren, da Python die Importe zwischenspeichert, so dass die examplemod , die Sie geändert haben, dieselbe ist, die example bekommt.

    
___ qstnhdr ___ Wie kann ich eine Konstante in einem importierten Python-Modul überschreiben? ___ answer12496221 ___

Dies wird Affepatching genannt, und es ist ziemlich üblich, obwohl es nicht bevorzugt wird, wenn es eine andere Möglichkeit gibt, dasselbe zu erreichen:

%Vor%

Das Problem ist, dass Sie sich darauf verlassen, dass die Interna von config und examplemod gleich bleiben, so dass dies bei einem der Modul-Änderungen passieren könnte.

    
___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ tag123module ___ Eine logische Unterteilung eines größeren, komplexeren Systems. ___ tag123pythonimport ___ Fragen zum Importieren von Modulen in Python ___ answer12496239 ___

Ja, aber es funktioniert nur wie erwartet mit vollständig qualifizierten Zugriffspfaden für Module:

%Vor%     
___ answer12496844 ___

Vielen Dank für Ihre Antworten. Sie wiesen mich in die richtige Richtung, obwohl keiner von ihnen wie geschrieben funktionierte. Ich habe folgendes getan:

%Vor%

(Ich übergebe auch einen Patch an den Modulbetreuer, um CONSTANT zu einer konfigurierbaren Option zu machen, so dass ich dies nicht machen muss, sondern das Standardmodul in der Zwischenzeit installieren muss.)

    
___
Dave Forgac 19.09.2012, 13:45
quelle

4 Antworten

3

Vielen Dank für Ihre Antworten. Sie wiesen mich in die richtige Richtung, obwohl keiner von ihnen wie geschrieben funktionierte. Ich habe folgendes getan:

%Vor%

(Ich übergebe auch einen Patch an den Modulbetreuer, um CONSTANT zu einer konfigurierbaren Option zu machen, so dass ich dies nicht machen muss, sondern das Standardmodul in der Zwischenzeit installieren muss.)

    
Dave Forgac 19.09.2012, 14:27
quelle
12

Ja, aber es funktioniert nur wie erwartet mit vollständig qualifizierten Zugriffspfaden für Module:

%Vor%     
vartec 19.09.2012 13:52
quelle
1

Ich bin mir nicht sicher, ob das genug ist oder nicht, aber hast du es versucht:

%Vor%

Stellen Sie sicher, dass Sie dies tun, bevor examplemod importiert wird. Dies sollte funktionieren, da Python die Importe zwischenspeichert, so dass die config , die Sie geändert haben, dieselbe ist, die examplemod bekommt.

    
ubershmekel 19.09.2012 13:49
quelle
1

Dies wird Affepatching genannt, und es ist ziemlich üblich, obwohl es nicht bevorzugt wird, wenn es eine andere Möglichkeit gibt, dasselbe zu erreichen:

%Vor%

Das Problem ist, dass Sie sich darauf verlassen, dass die Interna von examplemod und config gleich bleiben, so dass dies bei einem der Modul-Änderungen passieren könnte.

    
ecatmur 19.09.2012 13:52
quelle

Tags und Links