动态创建类实例代码


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实现简单的TCP代理服务器
Oct 08 Python
通过数据库对Django进行删除字段和删除模型的操作
Jul 21 Python
Python程序中的观察者模式结构编写示例
May 27 Python
Python之list对应元素求和的方法
Jun 28 Python
python读取目录下最新的文件夹方法
Dec 24 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
Feb 14 Python
Python+redis通过限流保护高并发系统
Apr 15 Python
Python 忽略文件名编码的方法
Aug 01 Python
Python实现Appium端口检测与释放的实现
Dec 31 Python
python基础详解之if循环语句
Apr 24 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
PHP文件注释标记及规范小结
2012/04/01 PHP
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
JS中this的4种绑定规则详解
2020/02/04 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
python处理中文编码和判断编码示例
2014/02/26 Python
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
Python自动登录126邮箱的方法
2015/07/10 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
一篇.NET面试题
2014/09/29 面试题
物流创业计划书
2014/02/01 职场文书
《姥姥的剪纸》教学反思
2014/02/25 职场文书
小学端午节活动方案
2014/03/13 职场文书
仓库规划计划书
2014/04/28 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
新郎新娘致辞
2015/07/31 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB