Python面试题更新 2026-08-03

在 Python 中,魔术方法是名称以双下划线开头和结尾的特殊方法。请列举至少 5 个常见的魔术方法,并简要说明每个方法的典型用途。

考察说明

考察对 Python 魔术方法(特殊方法)的掌握程度,包括常见方法的名称和它们的作用。

回答思路

  1. 【回答框架 1】魔术方法是 Python 中名称以双下划线开头和结尾的方法,用于定义类的特殊行为。它们允许自定义对象与 Python 语言的内置操作和语法进行交互。
  2. 【回答框架 2】常见的魔术方法包括:__init__ 用于对象初始化;__str__ 定义 str() 和 print() 的输出;__repr__ 定义 repr() 的输出,通常用于调试;__len__ 支持 len() 函数;__getitem__ 支持索引访问(如 obj[key]);__setitem__ 支持索引赋值。
  3. 【回答框架 3】此外,还有 __iter__ 和 __next__ 用于实现迭代器协议;__enter__ 和 __exit__ 用于支持上下文管理器(with 语句);__call__ 使实例可像函数一样调用;__eq__ 定义相等比较逻辑。
  4. 【回答框架 4】正确使用这些方法可以简化代码并让类具备 Pythonic 的接口,但需注意不要滥用,以免代码难以理解。
  5. 【关键点 1】__init__ 用于初始化新创建的对象。
  6. 【关键点 2】__str__ 和 __repr__ 分别控制用户可读和调试用的字符串表示。
  7. 【关键点 3】__len__、__getitem__ 等实现容器和序列协议。
  8. 【关键点 4】__enter__/__exit__ 实现上下文管理器协议。
  9. 【关键点 5】__call__ 让实例变得可调用。
  10. 【易错点 1】很多人会混淆 __str__ 和 __repr__,__repr__ 应尽量提供无歧义的信息,__str__ 偏重可读性。
  11. 【易错点 2】实现 __eq__ 时如果不定义 __hash__,集合和字典可能无法正确处理对象的哈希。
  12. 【易错点 3】如果只实现 __getitem__ 而忽略 __setitem__,对象将只支持读取而不支持修改。