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

记得在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:)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值