Python声明可由多个模块访问的全局类

Python声明可由多个模块访问的全局类,python,Python,如果我有一个模块gobalcfgs包含 class Cfgs: ... cfg = Cfgs() 是否有一种方法可以在项目中的多个模块之间共享此信息。 我有一个导入实用程序模块的主模块。因此,导入方向是 main <-- utility_1.py main <-- utility_2.py 实用的 def getData(cfg): getDataFromX(cfg): def getDataFromX(cfg): con = openConnecti

如果我有一个模块gobalcfgs包含

class Cfgs:
    ...

cfg = Cfgs()
是否有一种方法可以在项目中的多个模块之间共享此信息。 我有一个导入实用程序模块的主模块。因此,导入方向是

main <-- utility_1.py
main <-- utility_2.py
实用的

def getData(cfg):
    getDataFromX(cfg):

def getDataFromX(cfg):
    con = openConnection(cfg):

def openConnection(cfg):
    con = mycon(cfg.host)
from globalcfgs import cfg 
def openConnection():    
    con = mycon(cfg.host)
cfg是一种全局的,然后主要是

from globalcfgs import cfg 
cfg.setHost(host)
data = utility.getData()
实用

def getData(cfg):
    getDataFromX(cfg):

def getDataFromX(cfg):
    con = openConnection(cfg):

def openConnection(cfg):
    con = mycon(cfg.host)
from globalcfgs import cfg 
def openConnection():    
    con = mycon(cfg.host)
这并不是一个真实的例子,但我想说明的是,我需要通过一长串函数传递信息。
可以避免这种情况吗?

首先,不要调用globals类,因为这会影响内置的globals函数。在任何情况下,Python的风格都是类使用CamelCase(大写),函数使用snake_case


除此之外,你所拥有的一切都很好。您可以在任何使用cfg的模块中导入cfg;唯一的问题是,您的import语句是错误的,它应该来自globalstuff import cfg。

来自globals import cfg–这应该完全符合您的要求。它将使cfg在导入它的每个模块中作为全局名称可用。请记住,globals类隐藏了内置的Python函数globals,这通常不是很好的做法。谢谢。我一开始尝试过,但似乎每个模块都导入了自己的cfg实例。因此,我在主模块中对cfg所做的任何更改都不会反映在实用程序模块中的cfg中。这就是我的本意还是我在哪里做错了什么?不,那不是真的。如果在gobalcfgs中将cfg定义为Cfgs的实例,并且您在每个模块中导入它,那么它们都将指向同一个实例。它不会被共享的唯一方法是,如果您正在运行多个进程,但这对于任何数据都是一样的。