__str__面向用户追求可读性,__repr__面向开发者强调准确性和可调试性,建议始终实现__repr__并尽量返回可重建对象的表达式;__len__定义len(obj)行为,须返回非负整数;其他高频方法包括__eq__、__bool__、__getitem__和__call__。
这两个方法都用来返回对象的字符串表示,但定位不同:__str__ 面向用户,追求可读性;__repr__ 面向开发者,强调准确性和可调试性。
建议始终实现 __repr__,它应尽量返回能重建对象的表达式(比如 Point(1, 2));__str__ 可以复用 __repr__,也可简化为更友好的描述(比如 "点坐标:x=1, y=2")。
常见写法示例:
n__:定义“长度”的含义__len__ 让你的对象支持 len(obj) 调用。它必须返回一个非负整数,且不能返回浮点数或 None。
立即学习“Python免费学习笔记(深入)”;
注意:Python 不允许该方法返回负数,否则会抛出 ValueError;也不建议在逻辑上不明确“长度”时强行实现(比如对树结构返回节点数虽可行,但需确保使用者理解其语义)。
典型场景包括:
除了上面三个,以下方法也常用于基础行为定制: