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基于回溯法子集树模板解决找零问题示例
Sep 11 Python
Python内置模块logging用法实例分析
Feb 12 Python
使用Python搭建虚拟环境的配置方法
Feb 28 Python
python读取文本中数据并转化为DataFrame的实例
Apr 10 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
numpy数组广播的机制
Jul 12 Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 Python
关于Python形参打包与解包小技巧分享
Aug 24 Python
Python面向对象封装操作案例详解
Dec 31 Python
python函数定义和调用过程详解
Feb 09 Python
python如何写try语句
Jul 14 Python
python 基于opencv去除图片阴影
Jan 26 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
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
js导出txt示例代码
2014/01/14 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
canvas绘制七巧板
2017/02/03 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
python写入已存在的excel数据实例
2018/05/03 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
Python遍历字典方式就实例详解
2019/12/28 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
统计员岗位职责
2013/11/14 职场文书
医院标语大全
2014/06/23 职场文书
2014年残联工作总结
2014/11/21 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
小学生读书笔记范文
2015/06/30 职场文书
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js