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中argsort()函数的实例用法
Mar 30 Python
利用Python爬取微博数据生成词云图片实例代码
Aug 31 Python
详解python里使用正则表达式的全匹配功能
Oct 19 Python
TensorFlow的权值更新方法
Jun 14 Python
python实现NB-IoT模块远程控制
Jun 20 Python
Python 实现Windows开机运行某软件的方法
Oct 14 Python
解决python xx.py文件点击完之后一闪而过的问题
Jun 24 Python
Python Pandas数据结构简单介绍
Jul 03 Python
django+echart数据动态显示的例子
Aug 12 Python
Python基本类型的连接组合和互相转换方式(13种)
Dec 16 Python
pytorch实现特殊的Module--Sqeuential三种写法
Jan 15 Python
Pytorch 如何实现LSTM时间序列预测
May 17 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
php创建session的方法实例详解
2015/01/27 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
2013/11/25 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
javascript去除字符串左右两端的空格
2015/02/05 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
python uuid模块使用实例
2015/04/08 Python
python 字典(dict)按键和值排序
2016/06/28 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
Python魔法方法详解
2019/02/13 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
2014/09/02 HTML / CSS
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
巴西手表购物网站:eclock
2019/03/19 全球购物
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
自荐书模板
2013/12/19 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
学籍证明模板
2014/11/21 职场文书
2014年销售工作总结
2014/12/01 职场文书
出生公证书
2015/01/23 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
在校证明模板
2015/06/17 职场文书
小学英语课教学反思
2016/02/15 职场文书