我正在编写一个需要一些全局常量变量的包。虽然常量,但在执行任何其他操作之前,可以更改这些变量例如,nproc
是使用的处理器数量。由于允许全局变量更改是危险的,因此在导入包之后应锁定这些变量。
我提出的唯一方法是读取配置文件。但是,作为一个python包(而不是一个应用程序),需要一个配置文件才是真正的奇怪的。
处理此类全局配置的正确方法是什么?
修改:
重要的是要注意这些变量不会像pi
那样永远不会改变。它可以更改,但在使用此包时应保持不变。
答案 0 :(得分:1)
如果您的意思是将变量与源代码分开,那么我可能会建议python-decouple。我希望这有帮助
答案 1 :(得分:0)
您可以创建一个在初始化时设置变量的类,然后使用@property声明getter而不是setter。例如:
# For Python 2, inherit from object
# (otherwise @property will not work)
class MyGlobals():
# Possibly declare defaults here
def __init__(self, nproc, var1, var2):
self.__nproc = nproc
self.__var1 = var1
self.__var2 = var2
@property
def nproc(self):
return self.__nproc
@property
def var1(self):
return self.__var1
@property
def var2(self):
return self.__var2
myg = MyGlobals(4, "hello", "goodbye")
print(myg.nproc, myg.var1, myg.var2)
myg.nproc = 42
给出:
4 hello goodbye
Traceback (most recent call last):
File "gash.py", line 29, in <module>
myg.nproc = 42
AttributeError: can't set attribute
MyGlobals
类可能会放在一个模块中。