例如:
import mymodule myobject = mymodule.myclass()
from mymodule import myclass myobject = myclass()
m = __import__ ( ' mymodule ' ) c = getattr(m, ' myclass ' ) myobject = c()
但是要注意:如果myclass并不在mymodule的自动导出列表中(__all__),则必须显式地导入,例如:
m = __import__ ( ' mymodule ' , globals(), locals(), [ ' myclass ' ]) c = getattr(m, ' myclass ' ) myobject = c()
若要封装的规范一些,可以这样来做:
代码
class Activator: ''' 本类用来动态创建类的实例 ''' @staticmethod def createInstance(class_name, * args, ** kwargs): ''' 动态创建类的实例。 [Parameter] class_name - 类的全名(包括模块名) *args - 类构造器所需要的参数(list) *kwargs - 类构造器所需要的参数(dict) [Return] 动态创建的类的实例 [Example] class_name = 'knightmade.logging.Logger' logger = Activator.createInstance(class_name, 'logname') ''' (module_name, class_name) = class_name.rsplit( ' . ' , 1 ) module_meta = __import__ (module_name, globals(), locals(), [class_name]) class_meta = getattr(module_meta, class_name) object = class_meta( * args, ** kwargs) return object
转自:http://www.python8.org/a/fenleiwenzhang/yuyanjichu/2010/1001/566.html