似乎脚本中定义的类与导入脚本的类具有不同的范围。例如:
在文件 foo.py 中:
class foo(object):
def __init__(self):
print globals()
在我的主文件中:
from foo import foo
class bar(object):
def __init__(self):
print globals()
classimport = foo()
classinternal = bar()
从 foo 和 bar 返回的全局变量列表不同 - 这是为什么呢?
这让生活变得很困难,因为任何需要访问主 globals() 的类都必须驻留在主文件中。如何确保导入的类具有相同的全局范围?在阅读此处和此处的其他帖子后,我尝试过的一些事情包括:
module = __import__("foo", fromlist="foo")
globals()["foo"] = getattr(module, "foo")
和
__builtin__.foo = foo
任何帮助表示赞赏!
[编辑] - -
因此,根据上面的链接,这是在重复的文章中回答的。事实证明,范围不是跨模块共享的。它提到了几种解决方法,但在我的情况下,我需要实际创建/读取/写入全局变量。所以我在主脚本中创建了一个例程,并在初始化 foo 和 bar 时将其作为对象传递。例如:
def PrintGlobals():
print globals()
class bar(object):
def __init__(self, PrintGlobals):
self.PrintGlobals = PrintGlobals
self.PrintGlobals()
classinternal = bar(PrintGlobals)
(不是我选择这一切应该如何工作,在我有时间与应用程序开发人员相处之前,这是一种黑客行为:-)