如何在python包中优雅地处理全局配置

2024-05-08 02:57:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个需要一些全局常量变量的包。尽管这些变量是常量,但在执行任何其他操作之前,这些变量都可以更改。例如,nproc是使用的处理器数。由于允许全局变量更改是危险的,因此应该在导入包后锁定这些变量。在

我想到的唯一方法是读取配置文件。然而,作为python包(而不是应用程序),需要配置文件确实很奇怪。在

处理这种全局配置的正确方法是什么?在

编辑

需要注意的是,这些变量不是像pi那样永远不会改变的东西。它可以更改,但在使用此包期间应保持不变。在


Tags: 方法应用程序编辑配置文件pi处理器全局常量
2条回答

您可以创建一个在初始化时设置变量的类,然后使用@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

给出:

^{pr2}$

MyGlobals类可能被放在一个模块中。在

如果你的意思是从源代码中分离变量,那么我建议python-decouple。我希望这有帮助

相关问题 更多 >