恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

《堪称“万能钥匙”!hasattr、getattr、setattr、delattr 实战,手写一个简易框架核心》

  • 首页
  • 资讯中心
  • /
  • 《堪称“万能钥匙”!hasattr、getattr、setattr、delattr 实战,手写一个简易框架核心》

相关资讯

2026新手友好建站平台排行:不同需求匹配方案来啦! 2026/8/10 20:17:09
Votify下载速度优化指南:从ytdlp到aria2c,哪种模式最快? 2026/8/10 20:17:09
vit_large_patch16_224.augreg_in21k vs 其他ViT模型:为什么它是图像分类的优选? 2026/8/10 20:12:09

最新资讯

终极Python代码质量工具:mccabe复杂度检查器完全指南
Django for Professionals 4.0搜索功能实现:提升用户体验的关键
VueLocalStorage高级技巧:自定义命名空间与computed属性绑定
mccabe源码解析:理解Python圈复杂度计算的底层原理
DevOps Interview Guide中的GPU管理:K8s中的资源分配终极指南
web-daemon性能优化技巧:让你的定时任务更高效、更稳定

今日推荐

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南
告别语言障碍:KISS Translator 双语翻译插件终极指南
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

本周热门

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁
如何快速生成中国车牌图片:Python开源工具完整指南
当 LLM 遇见大文档:主流开源项目如何处理上下文超限

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

《堪称“万能钥匙”!hasattr、getattr、setattr、delattr 实战,手写一个简易框架核心》

发布时间:2026/8/10 20:17:09
《堪称“万能钥匙”!hasattr、getattr、setattr、delattr 实战,手写一个简易框架核心》 一、开篇当字符串变成“代码执行指令”如果你写过 Web 框架如 Django/Flask你一定遇到过这样的场景前端传来的 URL 是/user/get_name后端需要根据字符串get_name去调用对应的方法。如果不反射你只能写一堆if-elif堪称“面向胶水编程”。而 Python 的反射四兄弟就是专门用来解决这种“运行时才知道叫什么名字”的终极利器。二、基础篇四兄弟各司其职class User: def __init__(self, name): self.name name u User(小明) # 1. hasattr探测有没有 print(hasattr(u, name)) # True print(hasattr(u, age)) # False # 2. getattr获取值带默认值保命 age getattr(u, age, 18) # 没有 age 属性返回默认 18不报错 # 3. setattr设置属性没有就新建 setattr(u, job, 程序员) # 4. delattr删除属性 delattr(u, job)三、进阶扩展①getattr的“默认值”妙用——告别 Try-Except在解析复杂的 JSON 数据时经常有字段缺失。用getattr配合默认值代码瞬间清爽# 不优雅的写法 try: username user_obj.name except AttributeError: username 匿名用户 # 优雅的反射写法 username getattr(user_obj, name, 匿名用户)四、进阶扩展②字符串变函数——动态调用方法框架核心getattr不仅能取数据还能取方法拿到方法后加上括号()即可执行。class Calculator: def add(self, a, b): return a b calc Calculator() method_name add # 假设这个字符串是从配置文件或网络请求中读到的 if hasattr(calc, method_name): func getattr(calc, method_name) result func(10, 20) # 动态调用成功输出 30这就是Flask 路由和命令行工具如 Click底层实现的核心原理——通过字符串映射到函数执行。五、进阶扩展③深入setattr与__dict__的爱恨纠葛当我们执行setattr(u, name, 新名字)时本质上是在修改u.__dict__这个字典。print(u.__dict__) # {name: 小明} setattr(u, age, 30) print(u.__dict__) # {name: 小明, age: 30}注意大坑如果类定义了__slots__则没有__dict__此时setattr会走“描述符协议”Descriptor Protocol。这也是property的底层实现机制有兴趣的读者可以深挖一下__get__和__set__魔法方法。六、进阶扩展④安全红线——绝对禁止用户输入直接反射这是绝大多数新手会踩的致命漏洞user_input input(输入你想调用的属性) # 恶意用户输入 __class__ print(getattr(u, user_input))如果用户输入__class__就能拿到类的元数据输入__bases__可以拿到父类甚至可以通过链式反射进入os模块执行系统命令最佳实践白名单校验ALLOWED_ATTRS [name, age, get_info] if user_input in ALLOWED_ATTRS: print(getattr(u, user_input)) else: print(非法访问) 总结反射给了 Python 程序“灵魂出窍”的能力让我们可以像操作字典一样操作对象。用好它可以写出高度抽象的框架滥用它则会写出难以维护的“魔法代码”。记住反射是银弹但只打怪兽不打队友。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号