张芷铭的个人博客

特殊方法(魔法方法)是 Python 以 __xxx__ 格式命名的内置方法,由解释器自动调用,支持运算符重载、容器操作、迭代等功能。

核心特征

  1. 命名:双下划线包裹(__init____add__
  2. 调用:由解释器自动触发,不手动调用
  3. 作用:让自定义类支持内置类型操作

高频方法

初始化与销毁

方法触发场景
__init__obj = Class()
__del__对象被回收

运算符重载

1
2
3
4
5
6
class Num:
    def __init__(self, val): self.val = val
    def __add__(self, other): return Num(self.val + other.val)

a, b = Num(1), Num(2)
c = a + b  # 调用 a.__add__(b)

常用:__sub____mul____eq____lt__

容器操作

方法触发场景
__len__len(obj)
__getitem__obj[i]obj[1:3]
__setitem__obj[i] = val
__contains__x in obj

迭代

方法说明
__iter__返回迭代器
__next__返回下一元素

字符串表示

方法触发场景
__str__print(obj)str(obj)
__repr__交互式终端、repr(obj)

可调用对象

1
2
3
4
5
class Adder:
    def __call__(self, a, b): return a + b

add = Adder()
add(1, 2)  # 调用 add.__call__(1, 2)

Comments