似乎脚本中定义的类与导入到脚本中的类的作用域不同。例如:
在文件中食品公司名称:
class foo(object):
def __init__(self):
print globals()
在我的主文件中:
^{pr2}$为什么返回的foo-bar和global列表不同?在
因为任何需要访问main globals()的类都必须驻留在主文件中,这使得工作变得困难。如何确保导入的类具有相同的全局作用域?在阅读了其他帖子here和here之后,我尝试过的一些事情包括:
module = __import__("foo", fromlist="foo")
globals()["foo"] = getattr(module, "foo")
以及
__builtin__.foo = foo
感谢任何帮助!在
[编辑]--
所以根据上面的链接,这是在duplicate article中回答的。结果发现,作用域不是跨模块共享的。它提到了几种解决方法,但在我的例子中,我需要实际创建/读取/写入全局变量。所以我在主脚本中创建了一个例程,并在foo和bar初始化时将其作为对象传递。例如:
def PrintGlobals():
print globals()
class bar(object):
def __init__(self, PrintGlobals):
self.PrintGlobals = PrintGlobals
self.PrintGlobals()
classinternal = bar(PrintGlobals)
(这一切的工作方式不是我的选择,除非我有时间使用应用程序开发人员:-)
下面是python3FAQ要说的:
要查看不同范围内的全局变量,请尝试在执行期间的不同点执行print(globals())。例如:在运行任何代码之前在顶层模块中,然后在
__init__.py
中(因为您导入了foo),在foo的模块级,在每个函数中,以及在修改传递给函数的任何变量之前/之后。在This answer进一步解释:
但是请注意,导入包或包中的模块时,包
__init__.py
文件中分配的所有名称都可以在包命名空间中使用。在相关问题 更多 >
编程相关推荐