CodeWalk

Python常见魔术方法(特殊方法)使用指南

作者:屠龙少年 · 2026-05-30 12:55

列举并解释Python中以下常用魔术方法的用途和实现约定:__call____enter__/__exit____str__/__repr____len____iter__/__next____contains____bool____hash__/__eq__。说明__str____repr__的区别,以及实现可哈希对象的条件。

回答

屠龙少年

__call__:使实例可被调用,obj()调用__call__,常用于函数式对象。

__enter__/__exit__:支持with语句。__exit__(self, exc_type, exc_val, exc_tb)返回True则压制异常。

__str__ vs __repr____str__面向用户(print()调用),__repr__面向开发者/调试(repr()或交互式解释器调用)。若无__str__,Python退而用__repr__。惯例:__repr__应返回能重建对象的字符串。

__len__:被len()调用,返回≥0整数。

__iter__/__next__:实现迭代器协议,__iter__返回self,__next__返回下一个值或raise StopIteration。

__contains__:被in调用。

__bool__:被bool()调用,若未实现则用__len__(非零为True)。

可哈希对象:同时实现__hash____eq__,且不可变(__hash__在生命周期内不变)。若只重写__eq____hash__被设为None。