Python中动态创建类实例


例如: 

    
    
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值