Python3学习之路~7.3 反射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python3学习之路~7.3 反射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2367字,纯文字阅读大概需要4分钟。
内容图文
![Python3学习之路~7.3 反射](/upload/InfoBanner/zyjiaocheng/840/0a3d0af5523e4603b1092626af963dee.jpg)
python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、delattr,该四个函数分别用于对对象内部执行:检查是否含有某成员、获取成员、设置成员、删除成员。
hasattr(obj,name_str):判断一个对象obj里是否有name_str字符串对应的的方法或者属性
getattr(obj,name_str):相当于obj.name_str,根据字符串去获取obj对象里对应的方法的内存地址或对应属性的值
setattr(x, 'y', v) :相当于``x.y = v'',即通过字符串设置新的属性或方法
delattr(x, 'y'):相当于``del x.y'',删除对象obj里y字符串对应的属性
![Python3学习之路~7.3 反射 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506065514683.jpg)
![Python3学习之路~7.3 反射 - 文章图片](/upload/getfiles/0001/2021/5/6/20210506065514742.jpg)
class Foo(object): def __init__(self): self.name = 'wupeiqi' def func(self): return 'func' obj = Foo() # #### 检查是否含有成员 #### hasattr(obj, 'name') hasattr(obj, 'func') # #### 获取成员 #### getattr(obj, 'name') getattr(obj, 'func') # #### 设置成员 #### setattr(obj, 'age', 18) setattr(obj, 'show', lambda num: num + 1) # #### 删除成员 #### delattr(obj, 'name') delattr(obj, 'func')反射代码示例1
反射代码示例2:
#Author:Zheng Na def bulk(self): #外部方法 print("%s is yelling..." % self.name) class Dog(object): def __init__(self,name,age): self.name = name self.age = age def eat(self): print("%s is eating..." %self.name) d = Dog("小黄",1) choice = input("请输入属性或方法>>:").strip() if choice == "name": # 判断对象中是否有字符串对应的属性 print(hasattr(d,choice)) # true # 根据字符串去对象中获取对应属性的值 attr = getattr(d,choice) print(attr) # 小黄 # 修改对象中字符串对应属性的值 setattr(d,choice,"小白") print(d.name) # 小白 # 删除对象中字符串对应的属性 delattr(d,choice) print(d.name) # 报错:AttributeError: 'Dog' object has no attribute 'name' elif choice == "eat": # 判断对象中是否有字符串对应的方法 print(hasattr(d, choice)) # true # 据字符串去获取obj对象里对应的方法的内存地址,然后调用这个方法 func = getattr(d,choice) func() # 小黄 is eating... # 方法不能删除?还是我的用法有错? # delattr(d, choice) # 报错:AttributeError: eat elif choice == "talk": # 通过字符串设置新的方法,可动态地将一个外部的方法装配到类里 # bulk现在相当于一个变量名,你现在用talk来代替了 # 1.方法写死 # setattr(d,choice,bulk) # d.talk(d) # 小黄 is yelling... # 2.方法不写死 setattr(d,choice,bulk) func = getattr(d,choice) func(d) # 小黄 is yelling... else:# choice输入money # 通过字符串设置新的属性 setattr(d, choice, 22) print(getattr(d,choice)) # 22
3种方式获取obj对象中的name变量指向内存中的值 “alex”
class Foo(object): def __init__(self): self.name = 'alex' def func(self): return 'func' # 不允许使用 obj.name obj = Foo() print(obj.name) print(getattr(obj, 'name')) print(obj.__dict__['name'])
内容总结
以上是互联网集市为您收集整理的Python3学习之路~7.3 反射全部内容,希望文章能够帮你解决Python3学习之路~7.3 反射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。