首页 > 代码库 > python之-- 反射
python之-- 反射
反射定义:通过字符串映射或者修改程序运行时的状态,属性,方法。
方法有如下4个:
1:getattr(object,name,default=None):根据字符串去获取obj对象里的对应的方法的内存地址,如果是属性则会直接返回值。
2:hasattr(object,name):判断对象object里是否存在name字符串的方法映射
3:setattr(x,y,v) ==》 x.y = v :通过字符串设置新的属性(可以重设普通属性值,也可以将函数设置为类方法)
4:delattr(x,y)
举例:
1 # 将这个方法动态装入类中进行调用 2 def bulk(self): 3 print(‘%s is yelling...‘ % self.name) 4 5 class Dog(object): 6 def __init__(self,name): 7 self.name = name 8 def eat(self,food): 9 print(‘%s is eat %s‘ % (self.name,food)) 10 11 obj = Dog(‘沙皮‘) 12 mess = input(‘请输入操作的方法:‘) 13 if hasattr(obj,mess): 14 #-----删除--- 15 #delattr(obj,mess) # 模拟传入name,删除name属性 16 #print(obj.name) # 报错提示没有name属性 17 #-----以字符串打印方法值--- 18 # fun = getattr(obj,mess) # 这里将通过getattr得到talk方法的内存地址 19 # fun(‘baba‘) 20 #-----重置属性值--- 21 # setattr(obj,mess,‘22‘) # 这里可以重新修改已存在的属性值 22 # print(getattr(obj,mess)) 23 else: 24 25 #------设置将类外面的函数引入类中---- 26 # setattr(obj,mess,bulk) # 动态将bulk函数装入类中 27 # getattr(obj,mess)(obj) # 动态使用getattr方法获取输入值,然后将obj对象本身当参数传入,因为上面的bulk函数有self参数。 28 29 # -----设置动态传入属性 30 setattr(obj,mess,22) # 设置默认属性值, 31 print(getattr(obj,mess)) # 返回默认属性值22 32 # 可以重新设置已存在的属性值
python之-- 反射
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。