python 动态创建类
locals和globs
locals:
>>> def foo (arg):
x=3
print locals()
>>> foo(5)
{'x': 3, 'arg': 5}
x=3
print locals()
>>> foo(5)
{'x': 3, 'arg': 5}
Python有两个内置的函数,locals 和globals,它们提供了基于字典的访问局部和全局变量的方式。
- 局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x,Python将使用这个变量,然后停止搜索。
- 全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python将使用这个变量然后停止搜索。
动态的创建类的实例:
m = __import__('mymodule')
c = getattr(m, 'myclass')
myobject = c()
如果myclass并不在mymodule的自动导出列表中(__all__),则必须显式地导入,例如:
m = __import__('mymodule', globals(), locals(), ['myclass'])
c = getattr(m, 'myclass')
myobject = c()