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中DOM方法的动态性
Apr 11 Python
探究python中open函数的使用
Mar 01 Python
Python使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
Python解析并读取PDF文件内容的方法
May 08 Python
基于python plotly交互式图表大全
Dec 07 Python
Python实现非正太分布的异常值检测方式
Dec 09 Python
python序列类型种类详解
Feb 26 Python
Python中使用socks5设置全局代理的方法示例
Apr 15 Python
Python scrapy爬取小说代码案例详解
Jul 09 Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 Python
Python基础之tkinter图形化界面学习
Apr 29 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输入流php://input使用浅析
2014/09/02 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
JavaScript 高效运行代码分析
2010/03/18 Javascript
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
Python学习pygal绘制线图代码分享
2017/12/09 Python
python中使用%与.format格式化文本方法解析
2017/12/27 Python
python实现树形打印目录结构
2018/03/29 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
利用Python产生加密表和解密表的实现方法
2019/10/15 Python
Python input函数使用实例解析
2019/11/22 Python
Python面向对象封装操作案例详解
2019/12/31 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
迎新晚会邀请函
2014/02/01 职场文书
酒店管理求职信范文
2014/04/06 职场文书
计划生育标语
2014/06/23 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python