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实现带错误处理功能的远程文件读取方法
Apr 29 Python
Python爬虫模拟登录带验证码网站
Jan 22 Python
Python算法应用实战之队列详解
Feb 04 Python
python3中set(集合)的语法总结分享
Mar 24 Python
Django模板Templates使用方法详解
Jul 19 Python
Python socket模块方法实现详解
Nov 05 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
Python内建序列通用操作6种实现方法
Mar 26 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
Python Request类源码实现方法及原理解析
Aug 17 Python
利用python做表格数据处理
Apr 13 Python
如何利用Matlab制作一款真正的拼图小游戏
May 11 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 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
PHP中使用Imagick实现各种图片效果实例
2015/01/21 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
python数组复制拷贝的实现方法
2015/06/09 Python
json跨域调用python的方法详解
2017/01/11 Python
python非递归全排列实现方法
2017/04/10 Python
python发送告警邮件脚本
2018/09/17 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
python属于跨平台语言码
2020/06/09 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
洲际酒店集团大中华区:IHG中国
2016/08/17 全球购物
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
实习生自我评价
2014/01/18 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
大学生求职自荐信
2015/03/24 职场文书
z-index不起作用
2021/03/31 HTML / CSS
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android