Ich möchte eine Konstante definieren, die in allen Submodulen eines Pakets verfügbar sein soll. Ich habe gedacht, dass der beste Platz in der __init__.py
Datei des Root-Pakets wäre. Aber ich weiß nicht, wie ich das machen soll. Angenommen, ich habe ein paar Unterpakete mit jeweils mehreren Modulen. Wie kann ich von diesen Modulen aus auf diese Variable zugreifen?
Natürlich, wenn dies völlig falsch ist und es eine bessere Alternative gibt, würde ich es gerne wissen.
from . import MY_CONSTANT
from mypackage.constants import *
wird Kopien vonMY_CONSTANT
in jedem Submodul platzieren und nicht als Verweis auf dieselbe VariableMY_CONSTANT
in einem der Module mutieren, mutiert es überall. Wenn SieMY_CONSTANT
eines der Module neu zuweisen , wirkt sich dies nur auf dieses Modul aus. Wenn dies Ihre Absicht ist, müssen Sie nach Attributen referenzieren, dhmypackage.constants.MY_CONSTANT
.mymodule.py
in ,__init__.py
bevorMY_CONSTANT = 42
das wird da nicht beim Importmymodule.py
MY_CONSTANT
noch nicht definiert worden. Also muss man sich nachMY_CONSTANT = 42
oben bewegenimport mymodule
Das kannst du nicht tun. Sie müssen Ihre Konstanten explizit in den Namespace jedes einzelnen Moduls importieren. Der beste Weg, dies zu erreichen, besteht darin, Ihre Konstanten in einem "Konfigurations" -Modul zu definieren und sie überall dort zu importieren, wo Sie sie benötigen:
quelle
sys.modules
.Sie können globale Variablen von überall aus definieren, aber das ist eine wirklich schlechte Idee. Importieren Sie das
__builtin__
Modul und ändern oder fügen Sie Attribute zu diesen Modulen hinzu, und plötzlich haben Sie neue eingebaute Konstanten oder Funktionen. Wenn meine Anwendung gettext installiert, erhalte ich die Funktion _ () in allen meinen Modulen, ohne etwas zu importieren. Dies ist also möglich, aber natürlich nur für Projekte vom Typ Anwendung, nicht für wiederverwendbare Pakete oder Module.Und ich denke, niemand würde diese Praxis sowieso empfehlen. Was ist los mit einem Namespace? Diese Anmeldung hat die Versionsmodul, so dass ich wie „global“ Variablen zur Verfügung haben
version.VERSION
,version.PACKAGE_NAME
usw.quelle
Ich wollte nur hinzufügen, dass Konstanten mithilfe einer config.ini-Datei verwendet und mithilfe der configparser-Bibliothek im Skript analysiert werden können. Auf diese Weise können Sie Konstanten für mehrere Umstände haben. Wenn Sie beispielsweise Parameterkonstanten für zwei separate URL-Anforderungen hatten, kennzeichnen Sie diese einfach wie folgt:
Ich fand die Dokumentation auf der Python-Website sehr hilfreich. Ich bin mir nicht sicher, ob es Unterschiede zwischen Python 2 und 3 gibt. Hier sind die Links zu beiden:
Für Python 3: https://docs.python.org/3/library/configparser.html#module-configparser
Für Python 2: https://docs.python.org/2/library/configparser.html#module-configparser
quelle