惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
Arctic Wolf
T
The Blog of Author Tim Ferriss
月光博客
月光博客
Recent Announcements
Recent Announcements
V
V2EX
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 三生石上(FineUI控件)
P
Proofpoint News Feed
The Register - Security
The Register - Security
博客园 - 叶小钗
博客园 - Franky
The Cloudflare Blog
雷峰网
雷峰网
罗磊的独立博客
M
MIT News - Artificial intelligence
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
爱范儿
爱范儿
博客园 - 司徒正美
Recorded Future
Recorded Future
酷 壳 – CoolShell
酷 壳 – CoolShell
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog
F
Full Disclosure
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
B
Blog
大猫的无限游戏
大猫的无限游戏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
WordPress大学
WordPress大学
小众软件
小众软件
K
Kaspersky official blog
Attack and Defense Labs
Attack and Defense Labs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Forbes - Security
Forbes - Security
aimingoo的专栏
aimingoo的专栏
IT之家
IT之家
The Last Watchdog
The Last Watchdog
N
News and Events Feed by Topic
B
Blog RSS Feed
S
Security @ Cisco Blogs
美团技术团队
量子位
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cloudbric
Cloudbric
Hacker News - Newest:
Hacker News - Newest: "LLM"

BlogFinder

日常漫步 Vol.24 之漫步前山河 - 雅余 周报 #1-聊聊本周的收获 - Edwin's Blog 我的OpenCode必装插件与Skill Write Something 掌中之物未必在掌握之中 · CRIVU PiliNara,一个更顺手的 PiliPlus 分支 「NekoEcho」:做一个必有回响的猫娘主题博客 2026-05 书影音总结 简化博客主题 - 安迪 你要加油呐 我第一次发布 npm 包 拾花小记#45:中考前的二三事 – 小改学习志 黛西花园5月游 #18 枇杷又熟了的五月月报 一些奇奇怪怪的需求?word仿方正书版的几个小操作 - Xiobb's Blog 0419 御温泉之旅 修复了一些bug,网站基本上趋于稳定了 - 新锐博客 又回到四十年前 如何定义成功 迷鹿屋2026已重新上线 科技冰火两重天+一周回顾 ${title} 热度退了,我反而用得更深了-咕咚同学 我到底该不该换个域名? 随身WIFI折腾记 - 安迪 博客撰写体验提升——hexo pro插件 为什么不用相机把屏幕上的接关密码拍下来? 国清寺与天台山 – Ouroboros ★★★★☆《挽救计划》——久违的经济上行感 - Davidの3号基地 删除右键“打开方式”里多余选项 第三周刊_No.53|一切都会被支付两次 安卓APP通话记录与录音上传踩坑记录 - 子舒的博客 天量下跌 inBox 笔记 2.3.8,把工具栏交给了你-咕咚同学 我把小龙虾搬到了微信-咕咚同学 安好 - 响石潭 Compound Engineering Plugin:让每个工程单元都比上一个更容易 MOSS-TTS Family:开源高质量语音与声音生成模型家族深度解析 Crawl4AI:专为 LLM 设计的开源 Web 爬虫与数据抓取工具 Build Your Own X:从零实现你最喜欢的技术——程序员进阶的终极资源清单 Anthropic Skills:用文件夹教 Claude 专业技能的开源框架 1年的去月球(下) - 梅之夏 欢迎回来。 简单讲讲 ASN.1 与 OID DTV - 直播聚合客户端 5.22-5.27 – 不兴江 还没去过鸭川 – 不兴江 张晶晶同学三刷林志颖 关于我 – 不兴江 爱与嫉妒 – 不兴江 港股被持续做空 备案码花了四百块-咕咚同学 一句话生成封面:我给公众号做了4种风格的AI封面生成技能 「官」方認證 再谈费曼学习法 2026-05-28T00:34:11+08:00 2026-05-28T00:28:45+08:00 离谱的英语学习指南:基于AI的英语进阶系统方法论 iii:零集成架构的后端统一运行时 Claude Code Harness:让 Claude Code 工作有迹可循的工程化框架 Heretic:全自动移除大语言模型审查机制的开源工具 MarkItDown:微软开源的万能文档转 Markdown 利器 Harness:让 Claude Code 秒变多智能体协作工厂 这段时间尽折腾AI Agent了,确实极大地提高了效率 近期动态:两个新站点正式上线啦 误判解除!zhouayuan.com 腾讯安全申诉成功 - 周阿源|玩具设计・插画日常・生活随笔 Ralph:让 AI 编码工具自主循环跑完所有 PRD 任务的量产神器 全都违法 – 个人工作记录 关于zhouayuan.com被误判 “含违规信息” 的说明与申诉记录 - 周阿源|玩具设计・插画日常・生活随笔 小米 MiMo v2.5 Pro 白嫖 最大的人间清醒,兜里有钱,但是不花。 夜晚靓歌(12):于文文现场solo - 王志勇的Blog 今日插画:风扬起的倔强 - 周阿源|玩具设计・插画日常・生活随笔 回门习俗 独立网卡 - 忘记了回忆 500亿入股人工智能企业 从命令行到桌面智能体-咕咚同学 第一性原理读书笔记 行者微评论223-加班の守株待兔-博客|政治与时事-风雨行者 ZOZO开源物理接触求解器:GPU加速的可扩展仿真引擎 OpenStock:开源股票市场交易平台技术深度解析 MoneyPrinterTurbo:基于AI的全自动短视频生成工具深度解析 Claude-Mem:为 Claude Code 构建的持久化记忆压缩系统 Twenty:可代码化定制的企业级开源 CRM 平台技术深度解析 2026-05-26T22:59:17+08:00 企业级开源大模型部署平台 GPUStack 实战教程 1年的去月球(上) - 梅之夏 Sevalla - 静态网站托管服务 不用翻墙、不用注册、不用月费,普通人也能用上 Claude Code 装修灯具要注意⚠️ 黄梅天先锋 - 游子微博 公安备案顺利办结,站点备案全部完成 - 周阿源|玩具设计・插画日常・生活随笔 第三次兑换天猫超市卡了宗宗酱-三维狐少儿编程 Don't think, feel. - Rolen's Blog 人这一辈子,到底图个什么 博客迁移 - Edwin's Blog 情感赛道写作模板 再现本轮行情的典型特征 裁员与平常心-咕咚同学 别让“偷懒”,成为隐私泄露的破绽
typing_extensions 有用(二):使用 @override 打造重构代码时的“防呆神器” | 阿尔的代码屋
Algieba · 2026-06-18 · via BlogFinder

核心摘要 (TL;DR)

  • 背景:在 Python 中重写(Override)父类方法时,如果没有特殊标记,一旦手滑拼错方法名,或者父类日后修改了该方法名,子类的方法就会变成毫无作用的“死代码”,且 Python 运行时绝对不会报错
  • 核心问题:“幽灵方法”导致预期的多态失效。
  • 关键解法:使用 typing_extensions(或 Python 3.12+ 的 typing)中的 @override 装饰器,配合 IDE 的静态类型检查。
  • 避坑要点@override 在运行时是没有任何逻辑作用的,**必须开启 IDE 的严格类型检查(Type Checking)**才能让它发威。

问题概览卡片

基本信息

  • 应用场景:编写继承体系复杂的基础组件、工具链(如 LangChain/LangGraph 的自定义 Tool/Node)。
  • 技术栈:Python 3.8+, typing_extensions, VS Code (Pylance) / PyCharm / Mypy
  • 核心痛点:重构代码时“牵一发而动全身”,子类悄无声息地脱离了父类的接口规范。

案发现场:一次极其真实的“翻车”

让我们来看一段极其常见的代码。我们定义了一个 BaseTool,然后用 SearchTool 去继承并重写它的 execute 方法。

原始代码(致命的拼写错误):

1
2
3
4
5
6
7
8
9
10
11
class BaseTool:
def execute(self) -> str:
return "executed base"

class SearchTool(BaseTool):

def execue(self) -> str:
return "executed search"

tool = SearchTool()
print(tool.execute())

灾难表现:
代码完美运行,控制台没有任何报错。但输出的却是父类的 "executed base"!你的 SearchTool 完全没有按照预期工作,在复杂的业务逻辑中,这种 Bug 排查起来简直让人抓狂。


1. 根本原因分析:Python 为什么“不作为”?

如果你是从 Java(自带 @Override 注解并且必须通过编译)转过来的开发者,一定会觉得匪夷所思:为什么连个警告都没有?

因为 Python 是一门彻头彻尾的动态语言。在解释器眼中,你刚才的行为是极其合法的:

  1. 你继承了 BaseTool,所以你拥有了父类的 execute 方法。
  2. 你在 SearchTool 里写了一个叫 execue 的方法。Python 认为:“哦,这位程序员想为子类增加一个全新的专属方法,没毛病!”

这就导致了:你以为你在重写,实际上你在新增。 你新写的方法永远不会被框架多态调用,变成了游荡在内存里的“幽灵方法”。


为了拯救这种脆弱的继承关系,PEP 698 为 Python 引入了 @override 装饰器。

步骤一:引入依赖并标记代码

1
2
3
4
5
6
7
8
9
10
11
from typing_extensions import override

class BaseTool:
def execute(self) -> str:
return "executed base"

class SearchTool(BaseTool):

@override
def execue(self) -> str:
return "executed search"

步骤二(极其关键!):唤醒装睡的 IDE

⚠️ 高能避坑预警:
@override 在 Python 运行时(Runtime)是一个完全透明的纸老虎。它不会做任何检查,如果你不配置编辑器,加了等于没加。

要让它发挥作用,你必须开启静态类型检查(Static Type Checking):

  • VS Code 用户:打开设置,搜索 Type Checking Mode,将 Python > Analysis: Type Checking Modeoff 改为 basicstrict
  • PyCharm 用户:如果自带的检查没有标红,强烈建议在插件市场安装官方的 Mypy 插件。
  • CI/CD 玩家:在项目的 Makefile 或 pre-commit 钩子里加上 mypy your_project/

一旦开启,当你敲下错误代码的瞬间,IDE 就会冷酷地给你一巴掌(爆红提示):

error: Method "execue" is marked as an override, but no base class contains a method with that name.


3. 更高级的保命场景:应对父类重构

除了防拼写错误,@override 最大的价值在于抵御未来的重构灾难

假设半年后,维护 BaseTool 的架构师觉得 execute 这个名字不好,决定把它改成 run

1
2
3
4
class BaseTool:

def run(self) -> str:
return "executed base"

如果没有 @override,你的 SearchTool(依然写着 def execute)会直接报废,并在某次线上调用时引发核心业务崩溃。

但只要你写了 @override,在架构师按下保存键的那一刻,全公司所有继承了 BaseTool 并重写了 execute 的地方,全部会瞬间爆红,逼迫大家必须跟着一起修改方法名。这才是企业级工程架构的安全感!


4. 最终总结

场景不使用的后果使用 @override + 静态检查的结果
手滑拼错方法名静默失败,执行了父类逻辑❌ 瞬间标红,提示父类无此方法
方法参数不匹配运行时报 TypeError 崩溃❌ 瞬间标红,提示函数签名不匹配
父类删改了该方法子类方法变成毫无用处的死代码❌ 全局报错,强制级联重构

下一篇预告:在 typing_extensions 有用工具系列的第三篇中,我们将探讨 Unpack 结合 TypedDict,看看如何给 Python 无法无天的 **kwargs 装上类型透视眼。