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开发之list操作实例分析
Feb 22 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
Python中static相关知识小结
Jan 02 Python
Python键盘输入转换为列表的实例
Jun 23 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
在Django中实现添加user到group并查看
Nov 18 Python
pycharm的python_stubs问题
Apr 08 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
Python可变集合和不可变集合的构造方法大全
Dec 06 Python
Python实现日志实时监测的示例详解
Apr 06 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管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
php里array_work用法实例分析
2015/07/13 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
Python3基础之输入和输出实例分析
2014/08/18 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
Python实现识别手写数字大纲
2018/01/29 Python
python实现顺序表的简单代码
2018/09/28 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
python实现剪切功能
2019/01/23 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
Python如何安装第三方模块
2020/05/28 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
在Pycharm中安装Pandas库方法(简单易懂)
2021/02/20 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
诚实守信演讲稿
2014/09/01 职场文书
团员个人总结
2015/02/26 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题