您的位置:首页 > 编程语言 > Python开发

快乐Python快速上手系列7 - 动态获得类属性

2017-12-27 15:08 183 查看
记得在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:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: