Python实现动态添加类的属性或成员函数的解决方法


Posted in Python onJuly 16, 2014

某些时候我们需要让类动态的添加属性或方法,比如我们在做插件时就可以采用这种方法。用一个配置文件指定需要加载的模块,可以根据业务扩展任意加入需要的模块。

本文就此简述了Python实现动态添加类的属性或成员函数的解决方法,具体方法如下:

首先我们可以参考ulipad的实现:mixin。

这里做的比较简单,只是声明一个类,类初始化的时候读取配置文件,根据配置列表加载特定目录下的模块下的函数,函数和模块同名,将此函数动态加载为类的成员函数。

代码如下所示:

class WinBAS(Bas):
  def __init__(self):
    self.__baslist = {}
    self.__Init_Modules()
    pass
  def __Init_Modules(self):
    import modplugs
    for m in modplugs.__moduleset__:
      mh = __import__('modules.' + m)# + '.' + m)
      ma = getattr(mh, m)# + '.' + m)
      ma = getattr(ma, m)
      setattr(self.__class__, m, ma)

modplugs.py是模块配置文件如下:

__moduleset__ = [
'BAS_GetUserList',
]

然后建立目录modules下面建立一个空的__init__.py文件,把目录变为一个包,在modules目录下建立真正的BAS_GetUserList实现:BAS_GetUserList文件中有个BAS_GetUserList函数如下:

def BAS_GetUserList(self, strs):
  return [0, strs]

这样WinBAS类就可以动态加入了BAS_GetUserList函数。

Python 相关文章推荐
python网络编程学习笔记(一)
Jun 09 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
Nov 17 Python
pycharm远程调试openstack代码
Nov 21 Python
Python读取YUV文件,并显示的方法
Dec 04 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
Pytorch实现GoogLeNet的方法
Aug 18 Python
基于Python中isfile函数和isdir函数使用详解
Nov 29 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
基于Pycharm加载多个项目过程图解
Jan 19 Python
python实现IOU计算案例
Apr 12 Python
python 生成任意形状的凸包图代码
Apr 16 Python
Python重新引入被覆盖的自带function
Jul 16 #Python
Python实现扫描指定目录下的子目录及文件的方法
Jul 16 #Python
python re正则表达式模块(Regular Expression)
Jul 16 #Python
Web服务器框架 Tornado简介
Jul 16 #Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 #Python
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 #Python
python django集成cas验证系统
Jul 14 #Python
You might like
PHP代码优化技巧小结
2015/09/29 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
JS 遮照层实现代码
2010/03/31 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
jquery实现图片轮播器
2017/05/23 jQuery
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
详解Python中的__init__和__new__
2014/03/12 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
Python简易版停车管理系统
2019/08/12 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
python中如何打包用户自定义模块
2020/09/23 Python
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
团支书的期末学习总结自我评价
2013/11/01 职场文书
村班子对照检查材料
2014/08/18 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
年底个人总结范文
2015/03/10 职场文书
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript