记得在Java编程中,用过其一个Reflection的特性,也就是,通过class和Instance,获得其指定名称的函数、属性,然后调用修改。
这里简单说下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)
|
在缺少switch...case的python中,上面的写法看起来总是不是很舒服的样子,于是乎,找个途径,减少几行代码试试。
这里,不准备展开,只是想说,对于每一个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
|
上述是对于属性的读写操作,对于method也是类似,如下
func = getattr(obj, "method")
result = func(args)
|
Wish you happy with python:)