某些时候我们需要让类动态的添加属性或方法,比如我们在做插件时就可以采用这种方法。用一个配置文件指定需要加载的模块,可以根据业务扩展任意加入需要的模块。

本文就此简述了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实现动态添加类的属性或成员函数的解决方法相关推荐

  1. python 类装饰器和继承_python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)...

    介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. 1 #coding= ...

  2. python的抽象类详解_Python抽象类以及元类

    抽象基类: 继承的约束与协议 __doc__ = """ 抽象基类: 继承的约束与协议 # 抽象基类 --- 有点java的味道,也有点golang的味道,继承,协议,接 ...

  3. 我的Python学习笔记(四):动态添加属性和方法

    一.动态语言相关概念 1.1 动态语言 在运行时代码可以根据某些条件改变自身结构 可以在运行时引进新的函数.对象.甚至代码,可以删除已有的函数等其他结构上的变化 常见的动态语言:Object-C.C# ...

  4. react的class和style,动态添加类classnames库

    一,前言 1.在react中,class和style使用jsx语法绑定,和原生方式有点不同 二,style绑定 1.在react中,style使用jsx语法绑定,接受一个对象,对象的key是属性,va ...

  5. Css伪类选择器之常见形式、动态伪类篇

    伪类选择器 伪选择器包括伪类和伪对象选择器,伪选择器以冒号(:)作为前缀标识符.冒号前可以添加选择器,限定伪类应用的范围,冒号后为伪类和伪对象名,冒号前后没有空格,否则将错认为类选择器: 单纯式,E: ...

  6. Excel合并数据查找函数VLOOKUP()一直显示最后一行数据或者一直报错的解决方法

    Excel合并数据查找函数VLOOKUP()一直显示最后一行数据或者一直报错的解决方法 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地 ...

  7. 超链接a标签的伪类选择器问题,Link标签与visited标签的失效问题(问题介绍与解决方法)。以下全部内容跟可通过鼠标左键选取后,复制到编辑器中直接运行。

    超链接a标签的伪类选择器问题,Link标签与visited标签的失效问题(问题介绍与解决方法).以下全部内容跟可通过鼠标左键选取后,复制到编辑器中直接运行. 参考文章: (1)超链接a标签的伪类选择器 ...

  8. python爬取百度使用kw关键字爬取时出现,百度安全验证,解决方法

    python爬取百度使用kw关键字爬取时出现,百度安全验证,解决方法 之前爬取百度用kw时的代码(没有任何问题) import requestsurl = 'http://www.baidu.com/ ...

  9. R语言patchwork包将多个ggplot2可视化结果组合起来、使用plot_annotation函数为组合图添加标题信息、使用theme函数自定义组合图中的字体类型(family)

    R语言patchwork包将多个ggplot2可视化结果组合起来.使用plot_annotation函数为组合图添加标题信息.使用theme函数自定义组合图中的字体类型(family) 目录

最新文章

  1. Python进阶02 文本文件读写
  2. Apache POI和EasyExcel 第五集:Apache POI的Excel读取不同类型的数据
  3. The application server could not be contacted
  4. UOJ #164 [清华集训2015]V (线段树)
  5. Web前端开发笔记——第二章 HTML语言 第四节 超链接标签
  6. 1.2低级线程处理API
  7. 黑马程序员-OC-内存管理(非ARC模式下)
  8. AddThis AddFeed WordPress插件发布 [转]
  9. java面试题,各大企业常见的java笔试题及答案(精华)
  10. SketchUppro 2021 已支持M1芯片款mac安装 SketchUppro 2021 直装版M1安装教程 M1芯片处理器安装草图大师问题教程
  11. 一份毕业指南给需要的人
  12. ros_多消息同步回调(Synchronizer)
  13. html5 sketchpad,Sketchpad:基于html5在线图像绘画板
  14. bilibili视频下载 (python)
  15. 用支付宝和微信可以直接跳转拉起支付,API搭建比较方便第三方支付接口首选杉德比较靠谱,
  16. Bert预训练新法则!
  17. win10上cmd命令中文显示问号?
  18. JSP-----------简易购物车代码
  19. inetd和xinetd的区别 (ZT)
  20. [AV1] DC Intra Prediction

热门文章

  1. 修改github用户名
  2. 请编程实现:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复(百度了一下,get一种高性能算法,非递归)...
  3. DIY Ruby CPU 分析——Part III
  4. mknod创建设备(加载新的设备驱动时候,通常会用到此命令)
  5. Jquery性能优化(转自蓝色理想)
  6. 48.动态分区匹配算法(连续分区)
  7. java 首字母小写_java实现将字符串中首字母转换成大写,其它全部转换成小写的方法示例...
  8. wiki多个文件一起导入_wiki.js 使用 postgres 支持中文全文检索
  9. Spring 事务传播行为的理解
  10. 034_jQuery Ajax的getJSON和getScript方法