反射

    技术2023-08-27  71

    通过字符串映射或修改程序运行时的状态、属性、方法, 有以下4个方法:

    getattr

    根据字符串去获取obj对象里的对应的方法的内存地址

    hasattr

    判断一个对象obj里是否有对应的name_str字符串的方法

    setattr

    setattr(x,y,v)相当与 x.y = v

    delattr

    删除字符串对应的方法

    代码示例

    def bulk(self): print('{} is singing'.format(self.name)) class Dog(object): def __init__(self,name): self.name = name def eat(self,food): print('{} is eating {}'.format(self.name,food)) d = Dog('alex') #检查是否有该成员 choice = input('>>:') print(hasattr(d,choice)) #获取成员 try: choice = input('>>:') print(getattr(d,choice)) #如果时属性,返回值,如果是方法,返回内存地址 except AttributeError as e: print(e) #设置成员talk print('设置成员talk') setattr(d,'talk',bulk) print('调用talk') func = getattr(d,'talk') func(d) setattr(d,'name','lily') print(getattr(d,'name')) #删除成员 print('删除成员name') delattr(d,'name') print(hasattr(d,'name'))

    输出:

    >>:eat True >>:talk 'Dog' object has no attribute 'talk' 设置成员talk 调用talk alex is singing lily 删除成员name False
    Processed: 0.009, SQL: 9