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

推荐订阅源

博客园 - 叶小钗
O
OpenAI News
V
V2EX
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
S
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
小众软件
小众软件
L
LINUX DO - 热门话题
C
Cybersecurity and Infrastructure Security Agency CISA
博客园 - Franky
Security Latest
Security Latest
S
SegmentFault 最新的问题
Project Zero
Project Zero
Spread Privacy
Spread Privacy
K
Kaspersky official blog
J
Java Code Geeks
V
Vulnerabilities – Threatpost
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
月光博客
月光博客
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
人人都是产品经理
人人都是产品经理
博客园 - 三生石上(FineUI控件)
Scott Helme
Scott Helme
WordPress大学
WordPress大学
量子位
T
Threat Research - Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
AWS News Blog
AWS News Blog
Help Net Security
Help Net Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Simon Willison's Weblog
Simon Willison's Weblog
S
Secure Thoughts
博客园 - 【当耐特】
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
V
Visual Studio Blog
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
腾讯CDC
Cyberwarzone
Cyberwarzone
IT之家
IT之家
GbyAI
GbyAI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
云风的 BLOG
云风的 BLOG
T
Troy Hunt's Blog
D
Docker

博客园 - 悠哉大斌

AI Agent 安全沙箱技术对比:E2B、Cube Sandbox 与 Docker Sandboxes linux 升级 claude code的坑 debian(WSL) apt 代理配置 linux内核之Namespaces、Cgroups、Capabilities、Seccomp和Landlock 大语言模型推理中的隐藏瓶颈及其解决方法 Docker Sandboxes 技术是什么,和docker容器有什么区别 什么是 Docker Agent以及一个Docker Agent示例 windows wsl 安装 Temurin® JDK claude Code 和 codex 作为编程代理,前者使用typescript开发,后者使用rust,他们的决策依据是什么 Java 并发编程发展史与 java.util.concurrent 全景解析 LLM 真的改变了编码风格吗? 如果人工智能会犯错且不精确,为什么它正在改变世界? Python 的协程模型和 JavaScript 的 async/await python闭包和function.__closure__特殊属性 基于nodejs设计REST API的知名开源框架 windows上使用node-oracledb Thick 模式连接 Oracle 11g Claude Code CLI连接 DeepSeek V4模型后调用报400错误 python里对象(object)到底是什么 Python 泛型演变史 Python 类型别名的演变 Python 类型提示的演变史 PEP 593 新增的Annotated 类型 Alibaba AgentScope 和 microsoft agent framework 详细对比分析 spring AI Alibaba Agent Framework 和 agentscope有什么区别和联系 AI Agent协作模式以及主流开源框架对协作模式的支持 Tailscale 是如何接管 DNS 的? Agent = Model + Harness 使用rust编写typescript编译器的难点在什么地方,哪些数据结构是rust不擅长的? TypeScript/JavaScript 中的异步迭代语句 js中的生成器函数 Tailscale Serve and Funnel openclaw gateway的网络绑定模式 websocket协议和http协议有何依赖关系? MCP通信的双方是谁? claude code MCP 安装范围 如何在wsl2环境下给claude code cli 配置 playwright-mcp wsl的网络模式有哪几种,有哪些区别? AI Agent memory是什么? ai agent skills是什么? Go测试生态系统工具与最佳实践深度调研(聚焦认证授权系统) 线性代数中常见矩阵类型的概念关系思维导图 三种主流授权策略
python 的 dunder name和 sunder name
悠哉大斌 · 2026-05-12 · via 博客园 - 悠哉大斌

Python 社区里,对名字中的下划线有一套约定术语:

形式 名称 例子
name 普通名称 value
_name single leading underscore _cache
name_ single trailing underscore class_
__name double leading underscore __value
__name__ dunder name __init__
_name_ sunder name _missing_

其中:

  • __dunder__
  • _sunder_

主要出现在:

  • Python 内部协议
  • 元编程
  • Enum
  • dataclass
  • typing
  • 解释器保留接口

一、什么是 dunder name

dunder =

double underscore

即:

__name__

这种:

  • 前后各两个下划线

  • 又叫:

    • magic method
    • special method

典型例子

__init__
__new__
__call__
__iter__
__len__
__dict__
__class__

二、dunder 的意义

这是:

Python 语言级协议接口

例如:

len(x)

实际上调用:

x.__len__()

运算符也是

a + b

本质:

a.__add__(b)

for循环

for x in obj:

本质:

iter(obj)
→ obj.__iter__()

所以 dunder 本质是:

Python 解释器保留协议名

用于:

  • 运算符重载
  • 对象模型
  • 容器协议
  • 上下文管理
  • async协议
  • descriptor协议
  • 元类协议

等等。


三、dunder 有两个重要特点


1. 是解释器保留空间

你最好不要乱发明:

__myfunc__

因为未来 Python 可能占用。

PEP 明确建议:

用户代码不要随意定义新的 dunder 名字。


2. 由解释器隐式调用

例如:

obj[0]

其实:

obj.__getitem__(0)

所以:

  • dunder 是语言协议入口
  • 不是普通方法

四、什么是 sunder name

sunder =

single underscore

即:

_name_

特点:

  • 前后各一个下划线
  • 中间是名字

五、sunder 是“库内部保留协议”

不像 dunder 属于解释器。

sunder 更多是:

标准库/框架保留命名空间

最典型:

Enum

来自 Python 的 enum 模块。


Enum 大量使用 sunder

例如:

_missing_
_generate_next_value_
_ignore_

六、为什么 Enum 用 sunder 而不用 dunder

因为:

  • dunder 是解释器级别协议
  • Enum 只是标准库

它不能污染 Python 语言层。

因此:

_missing_

表示:

“Enum框架保留接口”

而不是:

“Python解释器协议”


七、一个典型例子:missing

from enum import Enum

class Color(Enum):
    RED = 1

    @classmethod
    def _missing_(cls, value):
        return cls.RED

现在:

Color(999)

不会报错,而会:

Color.RED

因为:

EnumMeta

内部会调用:

_missing_

八、dunder vs sunder 本质区别

对比 dunder sunder
形式 __x__ _x_
含义 解释器协议 库协议
谁调用 Python VM 框架/库
是否语言级 🚫
是否官方保留 强保留 弱保留
用户能否发明 不建议 更不建议冲突