《堪称“万能钥匙”!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 程序“灵魂出窍”的能力让我们可以像操作字典一样操作对象。用好它可以写出高度抽象的框架滥用它则会写出难以维护的“魔法代码”。记住反射是银弹但只打怪兽不打队友。

相关新闻

2026新手友好建站平台排行:不同需求匹配方案来啦!

2026新手友好建站平台排行:不同需求匹配方案来啦!

2026新手友好建站平台排行:不同需求匹配方案来啦! 先看一组数据。据艾瑞咨询与中国信通院联合发布的《2025-2026年中国企业数字化服务市场研究报告》,2025年国内网站建设整体市场规模突破2300亿元,同比增长15.3%。与此同时&#…

2026/8/10 20:17:23 阅读更多 →
Votify下载速度优化指南:从ytdlp到aria2c,哪种模式最快?

Votify下载速度优化指南:从ytdlp到aria2c,哪种模式最快?

Votify下载速度优化指南:从ytdlp到aria2c,哪种模式最快? 【免费下载链接】votify A command-line app for downloading songs, podcasts and videos from Spotify. 项目地址: https://gitcode.com/gh_mirrors/vo/votify Votify是一款功…

2026/8/10 20:17:23 阅读更多 →
Juicy Breakout核心功能揭秘:粒子特效与屏幕震动如何打造极致游戏感

Juicy Breakout核心功能揭秘:粒子特效与屏幕震动如何打造极致游戏感

Juicy Breakout核心功能揭秘:粒子特效与屏幕震动如何打造极致游戏感 【免费下载链接】juicy-breakout 项目地址: https://gitcode.com/gh_mirrors/ju/juicy-breakout Juicy Breakout是一款充满活力的游戏项目,其核心魅力在于通过精心设计的粒子特…

2026/8/10 20:17:23 阅读更多 →

最新新闻

BigARTM字典与批次管理完全指南:数据预处理到模型训练全流程

BigARTM字典与批次管理完全指南:数据预处理到模型训练全流程

BigARTM字典与批次管理完全指南:数据预处理到模型训练全流程 【免费下载链接】bigartm Fast topic modeling platform 项目地址: https://gitcode.com/gh_mirrors/bi/bigartm BigARTM作为高效的主题建模平台,其字典与批次管理是实现精准主题挖掘的…

2026/8/10 21:14:43 阅读更多 →
cfworker生态系统详解:CSV处理、UUID生成与错误监控全攻略

cfworker生态系统详解:CSV处理、UUID生成与错误监控全攻略

cfworker生态系统详解:CSV处理、UUID生成与错误监控全攻略 【免费下载链接】cfworker A collection of packages optimized for Cloudflare Workers and service workers. 项目地址: https://gitcode.com/gh_mirrors/cf/cfworker cfworker是一个专为Cloudfla…

2026/8/10 21:14:43 阅读更多 →
从“对话“到“执行“:2026年本地AI编程智能体实战指南

从“对话“到“执行“:2026年本地AI编程智能体实战指南

从"对话"到"执行":2026年本地AI编程智能体实战指南 一、2026年AI编程的技术拐点:为什么是"本地"与"智能体"在2023至2024年,我们习惯了通过云端API调用大模型来辅助编程。但进入2026年,两…

2026/8/10 21:14:43 阅读更多 →
深度学习模型训练与超参数调优:部署前别漏掉这些配置

深度学习模型训练与超参数调优:部署前别漏掉这些配置

深度学习模型训练与超参数调优:部署前别漏掉这些配置文中的模型规格、吞吐和时延只用来说明导出校验的关注点;具体容差与容量应由目标硬件和版本组合的基准测试确定。在 PyTorch 或 TensorFlow 离线训练阶段,当 Validation Set 的 AUC 创下新…

2026/8/10 21:14:43 阅读更多 →
Scirius开发指南:贡献代码、修复bug与添加新功能的完整路径

Scirius开发指南:贡献代码、修复bug与添加新功能的完整路径

Scirius开发指南:贡献代码、修复bug与添加新功能的完整路径 【免费下载链接】scirius Scirius is a web application for Suricata ruleset management and threat hunting. 项目地址: https://gitcode.com/gh_mirrors/sc/scirius Scirius是一款用于Suricata…

2026/8/10 21:14:43 阅读更多 →
BigARTM C++接口开发指南:从源码编译到自定义模型实现

BigARTM C++接口开发指南:从源码编译到自定义模型实现

BigARTM C接口开发指南:从源码编译到自定义模型实现 【免费下载链接】bigartm Fast topic modeling platform 项目地址: https://gitcode.com/gh_mirrors/bi/bigartm BigARTM是一个基于Additive Regularization of Topic Models技术的快速主题建模平台&#…

2026/8/10 21:13:43 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/10 1:05:29 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/10 1:05:29 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/10 1:05:29 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →