自定义Python对象的显示方式-实例解析__str__与__repr__

需积分: 32 108 下载量 97 浏览量 更新于2024-08-08 收藏 5.68MB PDF 举报
"这篇文档是关于Python编程中改变对象的字符串显示方法的,主要讨论了如何自定义类的`__str__()`和`__repr__()`方法,以便于更直观地展示实例信息。同时,提到了`!r`和`!s`在字符串格式化中的用途,以及Python Cookbook的相关章节,涵盖了数据结构、字符串、日期时间以及迭代器等多个领域的实用技巧。" 在Python中,当需要自定义对象实例的输出形式时,可以重写`__str__()`和`__repr__()`这两个特殊方法。`__str__()`方法用于定义对象转化为字符串的表示,通常在使用`str()`函数或`print()`函数时会被调用。而`__repr__()`方法则返回对象的一个可再现的字符串表示,通常用于调试,能反映出创建该对象的代码形式,这样在交互式解释器中看到的结果就像重新构建了该对象一样。 在提供的代码示例中,定义了一个`Pair`类,它有两个属性`x`和`y`。`__repr__()`方法使用`{0.x!r}`和`{0.y!r}`来确保属性被`repr()`函数处理,这将保证输出的是可执行的Python表达式。而`__str__()`方法则使用`{0.x!s}`和`{0.y!s}`,这会让属性被`str()`函数处理,适合直接打印或显示。通过这种方式,`Pair(3, 4)`的实例在交互式解释器中显示为`Pair(3, 4)`,在`print()`函数中输出为`(3, 4)`。 此外,`!r`和`!s`是字符串格式化语法的一部分,`!r`强制使用`repr()`,`!s`则强制使用`str()`。在类的实例中使用它们,可以控制输出的格式化方式。例如,`p = Pair(3, 4)`实例,使用`print(p)`将调用`__str__()`方法,输出`(3, 4)`,而直接在交互式环境中输入`p`会调用`__repr__()`,输出`Pair(3, 4)`。 这个文档来源于Python Cookbook,这本书是Python编程的实用指南,包含了许多高效解决问题的代码片段。文档中提到的章节涉及到数据结构(如列表、字典的操作)、字符串处理(如分割、匹配、替换等)、日期时间的处理以及迭代器和生成器的使用。这些内容对于深入理解Python编程和提升编程效率非常有帮助。