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实现在pickling的时候压缩的方法
Sep 25 Python
Python中使用urllib2模块编写爬虫的简单上手示例
Jan 20 Python
浅谈Python2获取中文文件名的编码问题
Jan 09 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
Python常用的json标准库
Feb 19 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
Sep 20 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
python中PyQuery库用法分享
Jan 15 Python
Python django中如何使用restful框架
Jun 23 Python
利用Python多线程实现图片下载器
Mar 25 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中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
让你的网站可编辑的实现js代码
2009/10/19 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
JS删除数组元素的函数介绍
2013/03/27 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
2019/09/05 Javascript
Python读写Redis数据库操作示例
2014/03/18 Python
寻找网站后台地址的python脚本
2014/09/01 Python
浅谈python中的正则表达式(re模块)
2017/10/17 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
基于Python共轭梯度法与最速下降法之间的对比
2020/04/02 Python
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
汇科协同Java笔试题
2012/03/31 面试题
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
车辆转让协议书
2014/09/24 职场文书
普通党员整改措施
2014/10/24 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
docker 制作mysql镜像并自动安装
2022/05/20 Servers