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概率计算器实例分析
Mar 25 Python
简单介绍Python中的JSON使用
Apr 28 Python
Python 多线程抓取图片效率对比
Feb 27 Python
Django admin实现图书管理系统菜鸟级教程完整实例
Dec 12 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
Python使用post及get方式提交数据的实例
Jan 24 Python
Python中使用遍历在列表中添加字典遇到的坑
Feb 27 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
Python的log日志功能及设置方法
Jul 11 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
Nov 29 Python
Python try except异常捕获机制原理解析
Apr 18 Python
Numpy 多维数据数组的实现
Jun 18 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实现的MySQL数据浏览器
2007/03/11 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
JavaScript全排列的六种算法 具体实现
2013/06/29 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
微信小程序通过一个json实现分享朋友圈图片
2019/09/03 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
python3实现点餐系统
2019/01/24 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
python中os.remove()用法及注意事项
2021/01/31 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
亚马逊印度站:Amazon.in
2017/10/15 全球购物
js实现弹框效果
2021/03/24 Javascript
数学检讨书1000字
2014/02/24 职场文书
道路交通安全实施方案
2014/03/12 职场文书
社会治安综合治理管理责任书
2014/04/16 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
青年联谊会致辞
2015/07/31 职场文书