某些时候我们需要创建一个对象的时候,要根据运行环境来确定对象的类型,这个时候就需要一种方法来动态的创建对象,也就是说类的名字是不确定的。
方法一 利用eval
def getObj(name):
return eval(name+'()')
方法二 利用getattr函数
比如
modulename = 'haha'#模块字符串
然后:m = __import__(mymodule)
下面方法就可以用python 动态创建类
如果要取得模块中的一个属性的话:可以用getattr(),比如:
c = getattr(m, 'myclass')
myobject = c()
但是要注意:如果myclass并不在mymodule的自动导出列表中(__all__),则必须显式地导入,例如:
m = __import__('mymodule', globals(), locals(), ['myclass'])
c = getattr(m, 'myclass')
myobject = c()
简单的可以用globals()[class_name]()
-
def create_obj(cls_name):
-
names = cls_name.split(".")
-
cls = globals()[names[0]]
-
for name in names[1:]:
-
cls = getattr(cls, name)
-
-
if isinstance(cls,type):
-
return cls()
-
else:
-
raise Exception("no such class")
如果要使用当前模块:
-
classname = 'blabla';
-
mod = sys.modules[__name__];
-
dynclass = getattr(mod, classname)
-
object = dynclass(params);
阅读(6295) | 评论(0) | 转发(0) |