从python中的不同模块导入单个全局变量

时间:2014-07-09 23:51:50

标签: python pep8

我有一个有趣的应用程序,我想从不同的模块访问一个全局变量。

我目前有模块x

from pkg.mod import *

以获取名称空间foo

我的pkg.mod如下所示

import x
foo = 0
# do some stuff
foo = myClass()

这一切都很有效,但是,我不想这样做,主要是因为它很糟糕。

如果我尝试以下

from pkg import mod

我遇到循环依赖问题。 ImportError: cannot import name mod这对我来说很有意义。

我想做的是

from pkg.mod import foo

但是这也给我一个导入名称错误:ImportError: cannot import name foo 我不确定为什么,除了我不认为你可以专门导入变量。

无论如何都要按照正确的做法导入foo吗?

--- ---编辑

我试图删除共享变量并以这种方式将其放在第三个模块中

pkg.y

foo = 0

pkg.mod

from pkg.y import foo
foo = myClass()
x.dostuff()

X

from pkg.y import foo
def dostuff():
   print(foo)

现在x认为foo仍为0.(我可以保证mod正在调用x,因此首先发生。)

1 个答案:

答案 0 :(得分:0)

当我需要一个真正的全局变量时,我发现创建一个名为trueglobals.py的模块更加清晰;它可以保持空白但是为了正确的文件......

# -*- coding: utf-8 -*-
# Object references that are used extensively across many modules are 
# stored here.

# someObject1      - instantiated in main.py
# someObject2      - instantiated in someothermodule.py

在实例化对象的模块中......

import trueglobals
trueglobals.someObject1 = myClass(somevar)

在任何需要该物体的模块中......

import trueglobals
localVar = trueglobals.someObject1