假设我在一个名为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
有关如何做到这一点的任何建议(以及为什么这不起作用?)
P.S:
我想要一个全局变量而不是仅设置一些要导入的变量的原因是我希望用户能够这样做:
>>> import mymod
>>> mymod.sm2.printdefs()
'blue'
10
>>> mymod._defaults.color='red'
>>> mymod.sm2.printdefs()
'red'
10
所以,使用全局变量是我认为我可以这样工作的唯一方法。
谢谢。
答案 0 :(得分:1)
global
不是你怎么做的。 sm1
应该只设置变量,然后所有其他模块都应该导入它。
sm1.py:
class get_defs:
color='blue'
number=10
_defaults = get_defs()
sm2.py
import sm1
def printdefs():
print sm1._defaults.color
print sm1._defaults.number
但是我真的不确定为什么你有这种全球性而不是某种工厂方法或类。如果您可以提供有用的实际项目的更多详细信息。