在Python中,每个对象都有一个内置的__str__()方法,它用于返回对象的字符串表示。这个方法在打印对象时自动被调用。然而,__str__()通常返回一个对用户友好的字符串,而__repr__()方法则返回一个更接近于代码的字符串表示,通常用于调试。

在某些情况下,你可能需要自定义对象的字符串表示,以便在打印或转换为字符串时显示特定的信息。下面,我们将探讨如何使用__str__()__repr__()方法来自定义对象的字符串表示。

什么是__str__()方法?

__str__()方法是一个特殊的方法,它定义了对象的字符串表示。当你打印一个对象或将其转换为字符串时,Python会自动调用这个方法。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"{self.name}, {self.age} years old"

p = Person("Alice", 30)
print(p)  # 输出: Alice, 30 years old

在上面的例子中,我们定义了一个Person类,并在其中实现了__str__()方法。这个方法返回了一个包含名字和年龄的字符串。

什么是__repr__()方法?

__repr__()方法也是一个特殊的方法,它返回对象的官方字符串表示。通常,这个字符串是可解析的,也就是说,你可以把它复制粘贴回Python环境中来重新创建这个对象。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"Person(name='{self.name}', age={self.age})"

p = Person("Alice", 30)
print(p)  # 输出: Person(name='Alice', age=30)

在这个例子中,__repr__()方法返回了一个包含类名、构造函数参数的字符串。

如何使用__str__()__repr__()

现在,你已经了解了__str__()__repr__()方法,下面是如何使用它们的步骤:

  1. 在你的类中定义__str__()方法,并返回一个描述对象状态的字符串。
  2. 可选地,定义__repr__()方法,返回一个可解析的字符串表示。
  3. 当你需要打印对象或将其转换为字符串时,Python将自动调用这些方法。

以下是一个完整的例子:

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages

    def __str__(self):
        return f"'{self.title}' by {self.author}, {self.pages} pages"

    def __repr__(self):
        return f"Book(title='{self.title}', author='{self.author}', pages={self.pages})"

book = Book("The Great Gatsby", "F. Scott Fitzgerald", 180)
print(book)  # 输出: 'The Great Gatsby' by F. Scott Fitzgerald, 180 pages
print(book.__repr__)  # 输出: Book(title='The Great Gatsby', author='F. Scott Fitzgerald', pages=180)

在这个例子中,我们定义了一个Book类,它包含了书名、作者和页数。我们为这个类实现了__str__()__repr__()方法,以便在打印或转换为字符串时提供有用的信息。

通过学习如何使用__str__()__repr__()方法,你可以更好地控制对象的字符串表示,使你的代码更加清晰和易于理解。