如果我有一个定义类的脚本:
script = """
class myClass:
def __init__(self):
self.name = 'apple'
self.color = 'green'
"""
Run Code Online (Sandbox Code Playgroud)
然后在自己的命名空间dict中执行此脚本:
NS = {}
exec script in NS
Run Code Online (Sandbox Code Playgroud)
然后创建一个类的实例并将其pickle:
a = NS['myClass']()
import pickle
save = pickle.dumps(a)
Run Code Online (Sandbox Code Playgroud)
现在,如果我试图取消它:
load = pickle.loads(save)
Run Code Online (Sandbox Code Playgroud)
我收到了错误
AttributeError: 'module' object has no attribute 'myClass'
Run Code Online (Sandbox Code Playgroud)
我认为这不起作用,因为python不知道在哪里找到myClass以重建对象.但myClass确实存在于NS dict中.有没有办法告诉pickle在哪里找到它正在加载的对象的类?
我正在使用python来解析python代码.说我正在解析的代码是:
def foo():
global x, y
x = 1
y = 2
print x + y
Run Code Online (Sandbox Code Playgroud)
我想在代码中找到全局x和y的所有用法.我有一个提前使用的全局变量列表,因此不需要从全局变量行中提取x和y.所以问题是:给定一些已知的全局变量列表在某些python代码中使用,例如['x','y']在这种情况下,如何解析代码以查找这些全局变量的用法?