小小张说故事
Python 的 isinstance 到底查了什么:拆开 __instancecheck__、ABC 缓存和 type 的区别
原创
关注作者
腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
搜索
搜索
关闭
发布
小小张说故事
社区首页
>
专栏
>
Python 的 isinstance 到底查了什么:拆开 __instancecheck__、ABC 缓存和 type 的区别
Python 的 isinstance 到底查了什么:拆开 __instancecheck__、ABC 缓存和 type 的区别
小小张说故事
关注
发布于 2026-11-15 19:23:30
发布于 2026-11-15 19:23:30
8
0
举报
概述
isinstance 不是自己翻 MRO,它把判断委托给第二个参数的类对象:普通 type 走默认实现,ABCMeta 换了一套带缓存、带 __subclasshook__、带 register 虚拟子类的实现。本文用本机 CPython 3.13.14 实测 __instancecheck__ 必须定义在 metaclass 上、register 不进 MRO、伪造 __class__ 能骗过 isinstance、20 万次性能差 4.4 倍,附对照表与七条排错清单
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系
cloudcommunity@tencent.com
删除。
python
目录
一、先跑四组反直觉结果
二、第一次写 __instancecheck__,我写错了
三、isinstance 到底问了谁
四、register 出来的虚拟子类:不进 MRO
五、__subclasshook__:只看有没有那个方法
六、性能:默认路径几乎免费,自定义路径慢 4 倍多
七、字节码层面:一个普通 CALL,一个专用指令
八、对照表
九、七条排错清单
结语
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档