Python实现动态添加类的属性或成员函数的解决方法,python函数
Python实现动态添加类的属性或成员函数的解决方法,python函数
某些时候我们需要让类动态的添加属性或方法,比如我们在做插件时就可以采用这种方法。用一个配置文件指定需要加载的模块,可以根据业务扩展任意加入需要的模块。
本文就此简述了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函数。
给你这样一个例子吧,这个例子里面有动态增加类的函数。
声明一个类,类初始化的时候读取配置文件,根据配置列表加载特定目录下的模块下的函数,函数和模块同名,将此函数动态加载为类的成员函数。
代码如下所示:
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函数。
类的外面可以定类的属性值。按理也可以定义类外定义函数。一定可以。比如
class a:
pass
def hello(self,name):
print "Hello %s"%name
a.hello=hello
a().hello("somebody")
这个代码测试通过。
相关内容
- 记录Django开发心得,django开发心得
- python中将字典转换成其json字符串,pythonjson
- Python的垃圾回收机制深入分析,python垃圾回收
- Python的内存泄漏及gc模块的使用分析,python泄漏gc模块
- python的迭代器与生成器实例详解,python生成器
- Python下singleton模式的实现方法,pythonsingleton
- python采集博客中上传的QQ截图文件,
- python中使用百度音乐搜索的api下载指定歌曲的lrc歌词,
- python使用pyhook监控键盘并实现切换歌曲的功能,python
- python中使用pyhook实现键盘监控的例子,pythonpyhook
评论关闭