动态创建类实例代码


Posted in Python onOctober 07, 2009

例如:
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
Python 相关文章推荐
Python去掉字符串中空格的方法
Mar 11 Python
python使用str & repr转换字符串
Oct 13 Python
Python实现两款计算器功能示例
Dec 19 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
python利用smtplib实现QQ邮箱发送邮件
May 20 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
Python PyInstaller安装和使用教程详解
Jan 08 Python
Python TestSuite生成测试报告过程解析
Jul 23 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 Python
Python 文件操作实现代码
Oct 07 #Python
Python 第一步 hello world
Sep 25 #Python
Python 字符串定义
Sep 25 #Python
Python 流程控制实例代码
Sep 25 #Python
Cython 三分钟入门教程
Sep 17 #Python
phpsir 开发 一个检测百度关键字网站排名的python 程序
Sep 17 #Python
PHP webshell检查工具 python实现代码
Sep 15 #Python
You might like
其他功能
2006/10/09 PHP
一个好用的分页函数
2006/11/16 PHP
Ajax PHP分页演示
2007/01/02 PHP
php mysql Errcode: 28 终极解决方法
2009/07/01 PHP
php curl_init函数用法
2014/01/31 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
vue-cli的eslint相关用法
2017/09/29 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
[01:20:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第四场 8.26
2018/08/30 DOTA
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
浅析Django中关于session的使用
2019/12/30 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
护理专业自荐信
2013/12/03 职场文书
行政部主管岗位职责
2013/12/28 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
高考升学宴答谢词
2015/01/20 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
2016年党员公开承诺书格式范文
2016/03/24 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android