动态创建类实例代码

例如: 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() 若要封装的规范一些,可以这样来做: code

代码如下:

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

Posted in 未分类

发表评论