🐍

Python 魔术方法

Python 双下划线魔术方法速查。

本地处理 · 不上传

加载工具中…

相关:python · 魔术方法 · dunder · magic

Python 魔术方法列出双下划线方法的作用与触发时机,涵盖构造、运算符重载、上下文管理与迭代协议。

使用步骤

  1. 先确定要定制的是构造、比较、迭代还是上下文管理
  2. 找到对应的魔术方法名
  3. 按约定实现返回值类型,比如 __eq__ 返回布尔
  4. 实现 __eq__ 时通常要一并实现 __hash__

使用场景

  • 实现自定义类的行为
  • 理解某个魔术方法何时被调用
  • 实现迭代器与上下文管理器
  • 阅读他人代码时查阅

小贴士

  • __str__ 面向用户、__repr__ 面向开发者。只定义一个的话应优先定义 __repr__,因为它会作为 __str__ 的后备。
  • 实现 __enter__ 与 __exit__ 即可用于 with 语句,这是管理资源(文件、连接、锁)最可靠的方式。
  • __eq__ 与 __hash__ 应当同时定义并保持一致,只改其中一个会破坏字典与集合的正确性。

常见问题

__str__ 和 __repr__ 有什么区别?

__str__ 面向最终用户,追求可读;__repr__ 面向开发者,应尽量能还原对象(理想情况下 eval 它能重建对象)。只定义 __repr__ 时,print 会自动回退使用它。

怎么让类支持 with 语句?

实现 __enter__ 与 __exit__ 两个方法。前者返回 with 语句中绑定的对象,后者负责清理。即便代码块中抛出异常,__exit__ 也一定会被调用,这是它比手工 try/finally 更可靠的原因。

为什么改了 __eq__ 对象就不能放进集合了?

因为定义 __eq__ 后 Python 会把 __hash__ 设为 None,使对象变为不可哈希。若需要放进集合或作字典键,必须同时定义 __hash__,且保证相等的对象哈希值也相等。

Python 魔术方法是免费的吗?

是。本站所有工具完全免费,无需注册登录、无广告干扰,打开即用。

使用Python 魔术方法,我的数据安全吗?

安全。该工具在你的浏览器本地完成处理,输入内容不会上传到服务器,隐私更有保障。