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实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 Python
python查看zip包中文件及大小的方法
Jul 09 Python
python的staticmethod与classmethod实现实例代码
Feb 11 Python
pyqt5的QWebEngineView 使用模板的方法
Aug 18 Python
python hook监听事件详解
Oct 25 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
tensorflow中tf.slice和tf.gather切片函数的使用
Jan 19 Python
jupyter实现重新加载模块
Apr 16 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
python编写扎金花小程序的实例代码
Feb 23 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
我的论坛源代码(三)
2006/10/09 PHP
C# Assembly类访问程序集信息
2009/06/13 PHP
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
简单的Python2.7编程初学经验总结
2015/04/01 Python
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
python3 实现对图片进行局部切割的方法
2018/12/05 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
python的等深分箱实例
2019/11/22 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
纽约海:Sea New York
2018/11/04 全球购物
园林技术个人的自我评价
2014/01/08 职场文书
开会迟到检讨书
2014/02/03 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
MySQL 逻辑备份 into outfile
2022/05/15 MySQL