假设我们有两个脚本,script1和script2。你知道吗
script1定义为:
class Foo(object):
def __init__(self, name):
self.name = name
class bar(object):
def __init__(self, name):
self.name = name
def test(givenString):
return eval(givenString)
脚本2定义为:
from .script1 import test
x = "Foo('me')"
print test(x)
script2对test(x)
的print语句成功地告诉我有一个Foo
对象,但这对我来说没有意义,因为我只从script1导入了test
,而不是Foo
。我查看了eval
文档,但这对我来说并不清楚。即使我从未导入类Foo
,怎么可能会创建一个Foo
对象呢?你知道吗
eval()
使用在其中执行的模块的全局变量。test
'存在于script1
全局命名空间中,因此eval()
执行的任何表达式都使用与该函数相同的命名空间,因此可以解析Foo
、bar
和test
。你知道吗导入函数不会改变其名称空间;
test
的全局变量不会仅仅通过从script2
调用而改变。如果是这样的话,script1
中的任何导入都将也需要导入到script2
,用于您想要使用的每个函数。那将是难以置信的不切实际。你知道吗您甚至可以看到您导入的函数的globals;
print test.func_globals
将显示script1
的确切名称空间。你知道吗相关问题 更多 >
编程相关推荐