我有一个有趣的应用程序,我想从不同的模块访问一个全局变量。
我目前有模块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,因此首先发生。)
答案 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