【问题标题】:Python package can't see global variable in another filePython包在另一个文件中看不到全局变量
【发布时间】:2021-07-11 16:32:50
【问题描述】:

我正在使用我正在创建的 Python 打包获得很多乐趣。但是我有一个问题;

无法看到假定为全局的变量!这是文件

__init__.py
main.py
helpers.py

在 main.py 我有以下内容

from .helpers import *
class scene:
    def __init__(self,variables):
        self.variables = variables

global _scene
_scene = scene(100)

所以我正在制作一个应该可以全局访问的 _scene。但是这在 helpers.py 中不起作用;

from .main import *
print(_scene)

当我运行时出现错误: NameError: name '_scene' 未定义

我认为 init.py 很好

from .main import *
from .helpers import *

我错过了什么?希望您的意见!

【问题讨论】:

  • global 只影响使用它的文件。问题似乎是由于循环导入,基本上你从helpers 导入并运行模块,这意味着它将在之前运行打印任何东西都被定义了
  • 谢谢@Matiiss!你会如何解决这个问题?不确定最佳做法是什么
  • global在全局范围内没有用,只是在告诉你使用全局的方法中使用
  • from X import * 具有省略以下划线开头的名称的默认行为。这可以通过在导入的模块中放置一个__all__ 列表来覆盖,其中包含要包含的* 的名称。或者只是专门导入想要的名称。

标签: python


【解决方案1】:

如果您想使用文件中的全局变量并在其他文件中使用它们,反之亦然,这是一个坏主意。它会产生周期性依赖。如果您需要在两个文件中使用全局变量,您可以定义第三个文件MyGlobals.py 并在那里声明全局变量。然后将该文件导入helpers.pymain.py 并通过MyGlobals._scene 访问

【讨论】:

  • MyGlobals 将依赖于 main.py,因为该类是在那里创建的,这不是循环依赖吗?我在您的解决方案中找不到模块时遇到一些错误。您将如何导入 MyGlobals?
猜你喜欢
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 2019-10-15
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多