Python实现动态添加类的属性或成员函数的解决方法
2014-07-16 00:00
1071 查看
某些时候我们需要让类动态的添加属性或方法,比如我们在做插件时就可以采用这种方法。用一个配置文件指定需要加载的模块,可以根据业务扩展任意加入需要的模块。
本文就此简述了Python实现动态添加类的属性或成员函数的解决方法,具体方法如下:
首先我们可以参考ulipad的实现:mixin。
这里做的比较简单,只是声明一个类,类初始化的时候读取配置文件,根据配置列表加载特定目录下的模块下的函数,函数和模块同名,将此函数动态加载为类的成员函数。
代码如下所示:
modplugs.py是模块配置文件如下:
然后建立目录modules下面建立一个空的__init__.py文件,把目录变为一个包,在modules目录下建立真正的BAS_GetUserList实现:BAS_GetUserList文件中有个BAS_GetUserList函数如下:
这样WinBAS类就可以动态加入了BAS_GetUserList函数。
本文就此简述了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实现动态添加类的属性或成员函数的解决方法
- Python实现动态加载模块、类、函数的方法分析
- python通过函数属性实现全局变量的方法
- Python实现动态添加属性和方法操作示例
- python通过函数属性实现全局变量的方法
- Python中动态添加类的属性或成员函数
- 一种实现Win32消息处理处理函数的新方法 - 基于Thunk实现的类成员消息处理函数
- 一种实现Win32消息处理处理函数的新方法 - 基于Thunk实现的类成员消息处理函数 .
- PHP动态方法或者属性的问题及解决
- 通过DLL路径,实现动态调用动态链接库中指定类的(静态)方法和属性
- 解决类间成员函数调用的两个方法
- 类成员函数作为多线程的入口函数的实现方法
- C#2005 .NET3.0高级编程学习笔记————类和结构,类的数据成员,类的函数成员(方法、属性)
- 类成员函数作为多线程的入口函数的实现方法
- <table>标签 利用DOM 的方法和属性实现对表格的动态操作
- 将任务4的解决用一个项目多个文件的方式实现,其中两个类的声明放在一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件。
- 如何动态保存不同类的对象的成员函数的地址?--解决(续)
- 如何动态保存不同类的对象的成员函数的地址?--解决
- 在类中创建成员函数线程的最优解决方法