python 反射
在做程序开发过程中个,我们需要执行对象里面的某个方法,或者调用对象中的某个变量,当由于我们无法确定这个方法或变量是否存在,
这时我们就需要一个特殊的方法或机制要访问或操作这个方法或变量,这种机制就就叫做反射
hasattr(obj,name_str) 判断obj对象中是否有对应的name_str字符串的方法(其中obj为对象名,name_str为字符串)
getattr(obj,name_str) 根据字符串name_str去获得obj对象里对应的方法的内存地址

1 class Person(object): 2 def __init__(self,name): 3 self.name = name 4 def talk(self): 5 print("%s正在交谈"%self.name) 6 7 p = Person("laowang") 8 print(hasattr(p,"talk")) # True。因为存在talk方法 9 print(hasattr(p,"name")) # True。因为存在name变量 10 print(hasattr(p,"abc")) # False。因为不存在abc方法或变量 11 12 ---------------------
setattr(obj,'name_str',abc) 为obj对象添加abc方法或变量并命名为name_str

1 def abc(self): 2 print("%s正在交谈"%self.name) 3 4 class Person(object): 5 def __init__(self,name): 6 self.name = name 7 8 p = Person("laowang") 9 setattr(p,"talk",abc) # 将abc函数添加到对象中p中,并命名为talk 10 p.talk(p) # 调用talk方法,因为这是额外添加的方法,需手动传入对象 11 12 13 setattr(p,"age",30) # 添加一个变量age,复制为30 14 print(p.age) # 打印结果:30 15 16 ---------------------
delattr(obj,'name_str') 删除obj对象中的变量name_str ,注意不能用于删除方法

1 class Person(object): 2 def __init__(self,name): 3 self.name = name 4 def talk(self): 5 print("%s正在交谈"%self.name) 6 7 p = Person("laowang") 8 9 delattr(p,"name") # 删除name变量 10 print(p.name) # 此时将报错 11 12 --------------------- 13 14 本文来自 喷跑的豆子 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/y472360651/article/details/73277957?utm_source=copy
本章博客由作者刘少辉著写
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述