gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:39:42 25 4
gpt4 key购买 nike

假设我在名为 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

关于如何做到这一点的任何建议(以及为什么这不起作用?)

附言:

我想要一个全局变量而不是仅仅设置一些要导入的变量的原因是我希望能够让用户这样做:

>>> import mymod
>>> mymod.sm2.printdefs()
'blue'
10
>>> mymod._defaults.color='red'
>>> mymod.sm2.printdefs()
'red'
10

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

谢谢。

最佳答案

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

但我真的不确定为什么您为此使用全局而不是某种工厂方法或类。如果您能提供有关实际项目的更多详细信息,那将很有帮助。

关于python - 从整个模块中可用的子模块创建全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34363070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com