So bin ich ziemlich tief in die Erstellung eines benutzerdefinierten Job/Prozess benutzerdefinierte Manager-Modul, und wenn ich zu integrieren es kam ich eine Interaktion, die ich noch nicht mit Modulen und Namespaces gesehen hatte .importiert modulemodule Namespaces interferieren miteinander
-Code spricht besser als Worte:
So gibt es zwei leicht unterschiedliche Skripte:
test1:
import jobManager
jobManager.jobMap = {'test1':'test123'}
UND test2:
import jobManager
jobManager.jobMap = {'test2':'test222'}
Top Level Script:
Soimport test1
import test2
print(test1.jobManager.jobMap)
print(test2.jobManager.jobMap)
, wenn ich die Top-Level-Skript ausführen, druckt:
{'test2':'test222'}
{'test2':'test222'}
Aber meine erwartete Ausgabe ist:
{'test1':'test123'}
{'test2':'test222'}
Ist das nur ein Fall, in dem test1.jobManager und test2.jobManager sind eigentlich der gleiche Namensraum? Gibt es eine Möglichkeit, sie getrennt zu halten?
Eine Umgehung wäre es also, alles in einer Klasse zu verpacken und in jedem der relevanten Module zu initialisieren? Oder gibt es einen anderen Weg? – user3593486
Ich bin überrascht, dass es etwas ist, das ich noch nie zuvor gesehen habe, ist es nur ein Fall, wo die Verwendung globaler Variablen unordentlich werden kann? Oder gibt es andere Grubenstürze, auf die ich achten sollte? – user3593486
Wenn Sie mehrere unabhängige Instanzen von Verhalten dann eine Klasse ist der Weg zu gehen. Der andere Nachteil, auf den Sie achten sollten, ist, wenn ein Modul auf mehrere Arten über 'sys.path' gefunden werden kann; Es ist möglich, dasselbe Modul auf mehrere verschiedene Arten zu importieren, * aber dies ist ein entartetes Verhalten und sollte nicht dazu verwendet werden, das obige Problem "zu lösen". –