反射
通过字符串映射或修改程序运行时的状态、属性、方法, 有以下4个方法
1 # hasattr(obj, name_str), 判断一个对象obj里是否有对应的name_str字符串的方法 2 # getattr(obj, name_str), 根据字符串去获取obj对象里的对应的方法的内存地址 3 # setattr(obj,'y',z), is equivalent to ``x.y = v'' 通过字符串设置新的属性 4 # delattr(obj, name_str) 删除 5 6 def bulk(self): 7 print("%s在大叫...." %self.name) 8 9 class Dog(object): 10 def __init__(self,name): 11 self.name = name 12 def eat(self,food): 13 print("%s在吃%s"%(self.name,food)) 14 def sleep(self): 15 print("%s 在睡觉"%self.name) 16 17 d = Dog("金毛") 18 choice = input(">>:").strip() 19 if hasattr(d,choice) : #输入方法名 eat或sleep 返回True 20 # print(getattr(d,choice)) #<bound method Dog.eat of <__main__.Dog object at 0x02509850>> 调用方法 得到内存地址 21 getattr(d,choice)("狗粮") #gou is eating... 狗粮 22 # delattr(d,choice) #删除 23 else: 24 setattr(d,choice,bulk) #d.talk = bulk #这里的talk为输入的talk 讲bulk方法添加到类里 25 func = getattr(d, choice) 26 func(d)
posted on
浙公网安备 33010602011771号