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(2)
Sep 15 Python
Django中的“惰性翻译”方法的相关使用
Jul 27 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
深入解析Python编程中super关键字的用法
Jun 24 Python
Python简单计算数组元素平均值的方法示例
Dec 26 Python
python with提前退出遇到的坑与解决方案
Jan 05 Python
Python 解决中文写入Excel时抛异常的问题
May 03 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
Jul 17 Python
Django项目中实现使用qq第三方登录功能
Aug 13 Python
python:批量统计xml中各类目标的数量案例
Mar 10 Python
python怎么自定义捕获错误
Jun 29 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.MVC的模板标签系统(二)
2006/09/05 PHP
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
php中取得URL的根域名的代码
2011/03/23 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
利用python代码写的12306订票代码
2015/12/20 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
python3 flask实现文件上传功能
2020/03/20 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
应届大专生求职信
2014/06/26 职场文书
食品安全汇报材料
2014/08/18 职场文书
高中校园广播稿
2014/10/21 职场文书
Python机器学习之基础概述
2021/05/19 Python