博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 版 Instance Activator
阅读量:7167 次
发布时间:2019-06-29

本文共 2560 字,大约阅读时间需要 8 分钟。

之前写一个Python 版本的DbRowFactory(),   在初始化DbRowFactory时候, 除了要传cursor外, 还需要传一个RowClass类, 还有一个RowClass类的模块名, 用起来不爽, 改造了一下. 这个事情的一个副产品Python 版 Intance Activator, 代码如下:   

最新的代码和DbRowFactory都放在codeplex上了.

#! /usr/bin/env python #coding=utf-8 import inspect import sys __author__ = 'Harry Liu, 
' __date__ = '16 Feb 2012' __version__="0001" ##reference doc #http://www.cnblogs.com/sevenyuan/archive/2010/12/06/1898056.html #http://stackoverflow.com/questions/4513192/python-dynamic-class-names #http://stackoverflow.com/questions/1796180/python-get-list-of-al-classes-within-current-module def createIntance(full_class_name,*args,**kwargs): ''' instantiate class dynamically [arguments] full_class_name: full class name that you want to instantiate, included package and module name if has *args: list style arguments in class constructor *kwargs: dict style arguments in class constructor [return] an instance of this full_class_name [example] import pyObjectCreator full_class_name="knightmade.logging.Logger" logger=pyObjectCreator.create_intance(full_class_name,'logname') ''' class_meta=getClassMeta(full_class_name) if class_meta!=None: obj=class_meta(*args,**kwargs) else: obj=None return obj def getClassMeta(full_class_name): ''' get class meta object of full_class_name, then we can use this meta object to instantiate full_class_name [arguments] full_class_name: full class name that you want to instantiate, included package and module name if has [return] an instance of this full_class_name [example] import pyObjectCreator full_class_name="knightmade.logging.Logger" loggerMeta=pyObjectCreator.getClassMeta(full_class_name) ''' namespace=full_class_name.strip().rsplit('.',1) if len(namespace)==1: class_name=namespace[0] class_meta=_getClassMetFromCurrModule(class_name) else: module_name=namespace[0] class_name=namespace[1] class_meta=_getClassMetaFromOtherModule(class_name,module_name) return class_meta def _getClassMetFromCurrModule(class_name): result=None module_name="__main__" for name, obj in inspect.getmembers(sys.modules[module_name]): if inspect.isclass(obj): if name==class_name: result=obj break return result def _getClassMetaFromOtherModule(class_name, module_name): module_meta=__import__(module_name,globals(), locals(),[class_name]) if module_meta!=None: class_meta=getattr(module_meta,class_name) else: class_meta=None return class_meta

你可能感兴趣的文章
.Net开发工程师笔试试题
查看>>
关于MySQL innodb外键限制
查看>>
王家林每日大数据语录Spark篇0010(2015.11.2于深圳)
查看>>
MySQL中DROP,TRUNCATE 和DELETE的区别
查看>>
无刷新分页小函数
查看>>
我的友情链接
查看>>
设置grub密码
查看>>
我的友情链接
查看>>
字符串结束标志
查看>>
false
查看>>
C++写的一个MYSQL控制台(4)
查看>>
75个顶级开源安全应用(1)
查看>>
【Linux】CentOS操作和问题汇总
查看>>
PowerDesigner中添加约束
查看>>
smarty变量操作符
查看>>
raid1 raid2 raid5 raid6 raid10的优缺点和做各自raid需要几块硬盘
查看>>
openstack安装部署——计算服务(控制节点&计算节点)前言
查看>>
JQuery Datatables服务器端处理示例
查看>>
Centos7 关闭防火墙
查看>>
Linux nginx+uWSGI+django+virtualenv+supervisor发布web服务器
查看>>