外包的python模块不更新全局变量

2024-10-04 03:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在类中添加一些全局变量。以下各项适用:

class AssignGlobal():

    @staticmethod
    def assign():
        code = 'xyz'
        index = 2
        globals()[code] = index

AssignGlobal.assign()

xyz  ## returns 2

但是,如果我将AssignGlobal类外包,则globals将不再更新。实际上,我不确定这个导入究竟做了什么。为什么它不更新我的全局

from backtester.outsourced import AssignGlobal as ag
## assume I created a file outsourced.py in the backtested subdirectory from where I am. It contains the AssignGlobal class above

ag.assign()

xyz

NameError                                 Traceback (most recent call last)
<ipython-input-3-8714e0ef31ed> in <module>
----> 1 xyz

NameError: name 'xyz' is not defined

Tags: theinfromindexcodeclassassignag
1条回答
网友
1楼 · 发布于 2024-10-04 03:21:39

Python全局变量的作用域基本上是它们在其中定义的模块

当您在模块内声明全局变量时,它们将被添加到模块__dict__,并且可以作为属性从另一个模块访问

在您的例子中,您正在导入outsourced模块的模块在其__dict__中不会有xyz,而是outsourced模块对象在您调用AssignGlobal.assign()后会设置一个属性xyz

以下代码将输出2

import outsourced

outsourced.AssignGlobal.assign()

print(outsourced.xyz)

原因是,当调用assignxyz是在outsourced模块的作用域中定义的,而不是作为全局变量导入的地方

要获取xyz值,需要将其作为outsourced模块对象的属性获取

{a1}显示了如何在模块之间共享变量

相关问题 更多 >