And*_* II 116 python module packages global-variables init
我想定义一个应该在包的所有子模块中可用的常量.我认为最好的地方是在__init__.py
root包的文件中.但我不知道该怎么做.假设我有几个子包,每个子包都有几个模块.如何从这些模块中访问该变量?
当然,如果这是完全错误的,并且有更好的选择,我想知道它.
Jas*_*mbs 178
你应该能够把它们放进去__init__.py
.这是一直这样做的.
mypackage/__init__.py
:
MY_CONSTANT = 42
Run Code Online (Sandbox Code Playgroud)
mypackage/mymodule.py
:
from mypackage import MY_CONSTANT
print "my constant is", MY_CONSTANT
Run Code Online (Sandbox Code Playgroud)
然后,导入mymodule:
>>> from mypackage import mymodule
my constant is 42
Run Code Online (Sandbox Code Playgroud)
尽管如此,如果你确实有常量,那么将它们放在一个单独的模块(constants.py,config.py,...)中是合理的(可能是最佳实践)然后如果你想在它们的包名称空间中输入它们,那么他们.
mypackage/__init__.py
:
from mypackage.constants import *
Run Code Online (Sandbox Code Playgroud)
但是,这并不会自动包含程序包模块名称空间中的常量.程序包中的每个模块仍然必须显式地从mypackage
或从中导入常量mypackage.constants
.
Fer*_*yer 30
你不能这样做.您必须明确地将常量导入每个单独模块的命名空间.实现此目的的最佳方法是在"config"模块中定义常量并将其导入到您需要的任何位置:
# mypackage/config.py
MY_CONST = 17
# mypackage/main.py
from mypackage.config import *
Run Code Online (Sandbox Code Playgroud)