反射
反射
反射指的是通过 “字符串” 对对象的属性和方法进行操作,python内置的方法
1、hasattr
通过 “字符串” 判断对象的属性或方法是否存在
2、getattr
通过 “字符串” 获取对象的属性或方法
3、setattr
通过 “字符串” 设置对象的属性或方法
4、delattr
通过 “字符串” 删除对象的属性或方法
class Foo:
x = 10
y = 20
def date(self):
print('天王盖地虎,小鸡炖蘑菇')
obj = Foo()
# 判断对象属性或方法是否存在
print(hasattr(obj, 'x')) # True
print(hasattr(obj, 'z')) # False
# #获取对象方法或属性
print(getattr(obj, 'x')) # 10
# # 可以设置默认值,值不存在时返回默认值,否则会报错
print(getattr(obj, 'z', '默认值')) # 默认值
# # 获取对象的方法
res = getattr(obj, 'date')
res() # 天王盖地虎,小鸡炖蘑菇
# 设置对象方法或属性
# 此处设置的对象属性是在对象下面的,不是在类下面
setattr(obj, 'z', 30)
print(hasattr(obj,'z')) # True
setattr(obj, 'x', 100)
print(getattr(obj, 'x')) # 100
# 删除对象属性或方法,只能删除对象下的属性或方法,类里的没法删除,所有显示还是有x
delattr(obj, 'x')
print(hasattr(obj, 'x')) # True
反射应用
class File:
def run(self):
while True:
# 让用户输入上传或下载命令
user_input = input('请输入upload上传或download下载:').strip()
# 判断输入的命令是否存在,并调用相应的方法
if hasattr(self, user_input):
func = getattr(self, user_input)
func()
else:
print('输入有误')
def upload(self):
print('正在上传...')
def download(self):
print('正在下载...')
file_obj = File()
file_obj.run()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!