Python 现代开发学习笔记

(十二)对象的显示与调试表示

直接打印普通实例,默认表示通常难以看出记录内容。可以定义面向阅读的 __str__,以及用于查看对象信息的 __repr__:

# str 供正常显示,repr 保留类型名和字段,便于观察对象内容。
class Book:
    def __init__(self, title, finished=False):
        self.title = title
        self.finished = finished

    def __str__(self):
        status = "已读" if self.finished else "未读"
        return f"{self.title}({status})"

    def __repr__(self):
        return f"Book(title={self.title!r}, finished={self.finished!r})"


book = Book("Python")
print(book)
print(repr(book))
print([book])

输出“Python(未读)”、Book(title='Python', finished=False),以及 [Book(title='Python', finished=False)]。print(book) 使用面向显示的字符串,列表展示内部元素时使用它们的 repr。f-string 中的 !r 表示先对这个值取得 repr,所以标题周围保留字符串引号。

两种方法都返回字符串,不直接在方法体里打印。前面数据类生成的显示方法是 __repr__;需要另外的阅读格式时,仍可以自己定义 __str__。

笔记正文与全部题解 · Ctrl / ⌘ K