快乐Python快速上手系列7 - 动态获得类属性
2017-12-27 15:08
183 查看
记得在Java编程中,用过其一个Reflection的特性,也就是,通过class和Instance,获得其指定名称的函数、属性,然后调用修改。
这里简单说下python的这项功能。
起因是这样的,有如下的类,在程序运行的过程中,需要根据core_N,这里,N取值[0, 1, 2, 3],根据N值的不同,需要向core_N中append数据。
当然可以用:
在缺少switch...case的python中,上面的写法看起来总是不是很舒服的样子,于是乎,找个途径,减少几行代码试试。
这里,不准备展开,只是想说,对于每一个class的instance,都有一个__dict__的变量,保存了该instance的所有函数和属性,可以通过getattr(obj, attr_name)和setattr(obj, attr_name)来急性读写。
完整的调用代码如下:
上述是对于属性的读写操作,对于method也是类似,如下
Wish you happy with python:)
这里简单说下python的这项功能。
起因是这样的,有如下的类,在程序运行的过程中,需要根据core_N,这里,N取值[0, 1, 2, 3],根据N值的不同,需要向core_N中append数据。
class Core_Group: def __init__(self, id): self.dsp_id = id self.timestamps_arr = [] self.core_0 = [] self.core_1 = [] self.core_2 = [] self.core_3 = [] |
if N == 0: core_0.append(value) if N == '1': core_1.append(value) if N == 2: core_2.append(value) if N == 3: core_3.append(value) |
这里,不准备展开,只是想说,对于每一个class的instance,都有一个__dict__的变量,保存了该instance的所有函数和属性,可以通过getattr(obj, attr_name)和setattr(obj, attr_name)来急性读写。
完整的调用代码如下:
class Core_Group: def __init__(self, id): self.dsp_id = id self.core_0 = [] self.core_1 = [] self.core_2 = [] self.core_3 = [] if __name__ == '__main__': core_id = '2' core_arr = "core_" + core_id my_cg = Core_Group('FSM-125') if core_id == '2': getattr(my_cg, core_arr).append("OK") print(my_cg.core_2) pass |
func = getattr(obj, "method") result = func(args) |
相关文章推荐
- 快乐Python快速上手系列2 - XML文件读写
- 快乐Python快速上手系列4 - UTC与本地时间转换
- 快乐Python快速上手系列5 - Excel文件处理
- 快乐Python快速上手系列9 - 界面Tkinter编程
- 快乐Python快速上手系列10 - 中文编码问题
- 快乐Python快速上手系列0 - Python Tips
- 快乐Python快速上手系列1 - CSV操作
- 【量化小讲堂-Python&Pandas系列01】如何快速上手使用Python进行金融数据分析
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记序
- 易康-eCognition 快速上手-入门系列教程(一)
- Docker 快速上手系列(4): 数据卷,数据卷容器的概念及相关操作
- Python实现动态添加类的属性或成员函数的解决方法
- python-类和对象(属性、方法)的动态绑定
- Python程序语言快速上手教程
- python是动态语言的表现以及属性方法操作
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第2章 控制流】
- .Net程序员玩转Android系列之三~快速上手
- python动态添加属性和方法
- Python编程快速上手-第四章实践
- Python快速上手(三)