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 相关文章推荐
使用IPython来操作Docker容器的入门指引
Apr 08 Python
python pandas 对series和dataframe的重置索引reindex方法
Jun 07 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
Python Grid使用和布局详解
Jun 30 Python
python利用Tesseract识别验证码的方法示例
Jan 21 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 Python
Django values()和value_list()的使用
Mar 31 Python
python实现二分类和多分类的ROC曲线教程
Jun 15 Python
最简单的matplotlib安装教程(小白)
Jul 28 Python
Python爬虫基础之爬虫的分类知识总结
May 13 Python
这样写python注释让代码更加的优雅
Jun 02 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中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
js实现一个简易计算器
2020/03/30 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
jQuery实现本地存储
2020/12/22 jQuery
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
Python中二维列表如何获取子区域元素的组成
2017/01/19 Python
浅谈python日志的配置文件路径问题
2018/04/28 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
2014年大学生党员自我评议
2014/09/22 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
推广普通话的宣传语
2015/07/13 职场文书