从整个模块中可用的子模块创建全局变量

时间:2015-12-18 20:00:57

标签: python module

假设我在一个名为mymod的目录中有三个文件。这三个文件是__init__.pysm1.pysm2.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

所以,使用全局变量是我认为我可以这样工作的唯一方法。

谢谢。

1 个答案:

答案 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

但是我真的不确定为什么你有这种全球性而不是某种工厂方法或类。如果您可以提供有用的实际项目的更多详细信息。