张芷铭的个人博客

特殊方法(魔法方法)以 __xxx__ 命名,由解释器自动调用,实现运算符重载、容器操作、迭代等行为。

对象生命周期

方法说明
__new__创建实例(__init__ 之前)
__init__初始化
__del__销毁
__copy__浅复制
__deepcopy__深复制

运算符重载

算术运算

方法运算符
__add__+
__sub__-
__mul__*
__truediv__/
__floordiv__//
__mod__%
__pow__**

反向运算

__radd____rsub__ 等(左操作数不支持时调用)

比较运算

方法运算符
__eq__==
__ne__!=
__lt__<
__gt__>
__le__<=
__ge__>=

赋值运算

__iadd____isub__ 等(+=-=

容器操作

方法触发
__getitem__obj[key]
__setitem__obj[key] = val
__delitem__del obj[key]
__contains__x in obj
__len__len(obj)

属性访问

方法说明
__getattr__访问不存在的属性
__getattribute__访问任意属性
__setattr__设置属性
__delattr__删除属性

迭代

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

字符串表示

方法场景
__str__print()str()
__repr__repr()、交互式终端
__format__format()

数值转换

方法场景
__bool__bool(obj)
__int__int(obj)
__float__float(obj)

上下文管理

方法说明
__enter__进入 with
__exit__离开 with

其他

方法说明
__call__对象可调用
__hash__哈希值(用于字典键)

Comments