【发布时间】:2015-12-30 07:53:28
【问题描述】:
假设我在一个名为mymod 的目录中有三个文件。这三个文件是__init__.py、sm1.py、sm2.py。模块内容如下:
__init__.py
import sm1
import sm2
global _defaults
sm1.py
global _defaults
class get_defs:
color='blue'
number=10
_defaults = get_defs()
sm2.py
def printdefs():
print _defaults.color
print _defaults.number
所以,我要做的是在子模块sm1 中设置一个名为_defaults 的类,可以从模块或子模块中的任何其他位置访问它,以便子模块sm2 也可以访问和打印它班级。我以为这个设置会起作用,但是当我运行时
import mymod
mymod.sm2.printdefs()
我收到此错误:
NameError: global name '_defaults' is not defined
关于如何做到这一点的任何建议(以及为什么这不起作用?)
附:
我想要一个全局变量而不是仅仅设置一些要导入的变量的原因是我希望能够让用户这样做:
>>> import mymod
>>> mymod.sm2.printdefs()
'blue'
10
>>> mymod._defaults.color='red'
>>> mymod.sm2.printdefs()
'red'
10
所以,我认为只有使用全局变量才能像这样工作。
谢谢。
【问题讨论】:
-
这并不是 python 真正的工作方式。这看起来更像是 rails 自动加载器。在使用 rails 之后,这是一件可怕的事情。
-
你能给我推荐一个“首选”的方法吗?