21. 反射
一、什么是反射
Python 是一种动态语言,而反射(reflection)机制被视为动态语言的关键。反射机制指的是在程序的运行过程中,对于任意一个类,都可以知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意方法和属性。这种动态获取程序信息以及动态调用对象的功能称为 反射机制。
反射,本质上就是通过字符的形式去操作对象/模块中的成员。在 Python 中,我们可以通过四个内置函数去实现反射相关的功能。
getattr(object, name) # 获取对象中的成员
getattr(object, name, default) # 获取对象中的成员,如果没有则返回default指定的指
setattr(object, name, value) # 设置对象中的成员
hasattr(object, name) # 判断对象的成员是否存在
delattr(object, name) # 删除对象的成员是否存在
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def show_info(self):
print("你猜猜我是谁?")
p = Person("Sakura",10)
if hasattr(p,"name"): # 判断对象的成员是否存在
name = getattr(p,"name",None) # 获取对象中的成员
print(name)
if hasattr(p,"age"): # 判断对象的成员是否存在
age = getattr(p,"age") # 获取对象中的成员
print(age)
setattr(p,"age",12) # 设置对象中的属性
age = getattr(p,"age") # 获取对象中的成员
print(age)
delattr(p,"age") # 删除对象中的属性值
print(p.__dict__)
if hasattr(p,"show_info"):
func = getattr(p,"show_info")
func()
setattr(p,"show_info",lambda : "我是一个无忧无虑的人")
func = getattr(p,"show_info")
msg = func()
print(msg)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2023-10-23 02. 初识HAL库