请原谅模糊的标题。如果有人有建议,请告诉我!也请用更合适的标签重新标记!
问题
我想让一个导入类的实例能够查看导入器范围(全局、本地)内的东西。由于我不确定这里工作的确切机制,我可以用片段而不是文字来更好地描述它。
## File 1
def f1(): print "go f1!"
class C1(object):
def do_eval(self,x): # maybe this should be do_evil, given what happens
print "evaling"
eval(x)
eval(x,globals(),locals())
然后从一个迭代会话中运行这段代码,会有很多NameErrors
## interactive
class C2(object):
def do_eval(self,x): # maybe this should be do_evil, given what happens
print "evaling"
eval(x)
eval(x,globals(),locals())
def f2():
print "go f2!"
from file1 import C1
import file1
C1().do_eval('file1.f1()')
C1().do_eval('f1()')
C1().do_eval('f2()')
file1.C1().do_eval('file1.f1()')
file1.C1().do_eval('f1()')
file1.C1().do_eval('f2()')
C2().do_eval('f2()')
C2().do_eval('file1.f1()')
C2().do_eval('f1()')
这类任务是否有共同的习语/模式?我是不是完全找错树了?