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 相关文章推荐
详解Python3.1版本带来的核心变化
Apr 07 Python
python中__call__内置函数用法实例
Jun 04 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
python异步存储数据详解
Mar 19 Python
Python2与Python3的区别实例总结
Apr 17 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
使用opencv将视频帧转成图片输出
Dec 10 Python
django 数据库 get_or_create函数返回值是tuple的问题
May 15 Python
简述python&pytorch 随机种子的实现
Oct 07 Python
Django程序的优化技巧
Apr 29 Python
python内置进制转换函数的操作
Jun 02 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 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
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
js实现网页收藏功能
2015/12/17 Javascript
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
webpack3之loader全解析
2017/10/26 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
微信小程序如何使用globalData的方法
2019/06/06 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
Python数据可视化之画图
2019/01/15 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
Bootstrap 学习分享
2012/11/12 HTML / CSS
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
高中毕业自我评价
2014/02/08 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
同学毕业留言寄语
2015/02/27 职场文书
紧急通知
2015/04/17 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
Python保存并浏览用户的历史记录
2022/04/29 Python