Python __str__ 是什么?

2025年1月5日 | 阅读 4 分钟

Python 中一个独特的方法 __str__ 用于定义一个对象的可读性字符串表示形式。此方法与 __init__、__repr__ 和其他“dunder”(双下划线)方法一样,是 Python 数据模型的一个组成部分。对 __str__ 方法有扎实的理解和熟练的掌握对于编写功能齐全且用户友好的类至关重要。

__str__: 它是什么?

为了获得对象的字符串表示形式,print() 和 str() 函数会调用 __str__ 方法。 __str__ 的主要目的是提供对象的“漂亮的”或人类可读的表示形式;这对于日志记录和调试非常有用。

这是一个简单的例子,展示了如何使用 __str__

输入

输出

Person(name=John, age=45)

在此示例中,当调用 print(person) 时,Python 内部使用 __str__ 函数来获取 person 对象的字符串表示形式。

输入

输出

Employee name is John Doe, employee's age is 30 and id is 1024
Employee name is John Doe, employee's age is 30 and id is 1024
Employee name is John Doe, employee's age is 30 and id is 1024
Employee(first_name='John Doe', age=30, employee_id=1024)

在此示例中定义了 Python __str__ 方法,并且可以将结果与前一个示例中的结果进行比较。在这种情况下,__str__ 方法已定义,从调用 __str__、str() 和 print() 方法获得的结果来自已定义的 __str__ 方法。但是,正如您所看到的,即使我们创建了 __str__ 方法,__repr__ 方法的情况也不是如此,因为输出保持不变。

仅定义 __repr__

在此示例中,我们将仅定义 __repr__ 方法。让我们看看仅定义 __repr__ 方法而将 __str__ 方法留空的结果。

输入

输出

Employee(first_name=Roy Ridd, years_old=25, employee_id=2024)
Employee(first_name=Roy Ridd, years_old=25, employee_id=2024)
Employee(first_name=Roy Ridd, years_old=25, employee_id=2024)
Employee(first_name=Roy Ridd, years_old=25, employee_id=2024)

__str__ 和 __repr__ 之间的区别

Python 中另一个可比较的函数名为 __repr__。虽然使用 __str__ 和 __repr__ 都可以返回对象的字符串表示形式,但它们的功能是不同的。

__str__ 的目标是使其易于阅读和使用。它旨在为最终用户或用于清晰简洁地显示信息。

__repr__ 的目的是为开发人员提供清晰实用的信息。它通常提供有关对象的更详细信息,可用于重新创建它。

这是一个说明区别的例子

输入

输出

Rosy, 38 years old
Person(name='Rosy', age=38)

Python 中 __str__ 的示例

现在,让我们研究几个示例,看看 __str__ 方法在不同场景下的工作原理。

例如

在此示例中,我们将使用带有用户定义类的 __str__ 方法,因此不会指定 __str__ 和 __repr__ 方法。让我们看以下示例中的这种情况结果

输入

输出

Student name is Dravid, number is 200, age is 27, and grade level is Senior
Student name is Dravid, number is 200, age is 27, and grade level is Senior
Student name is Dravid, number is 200, age is 27, and grade level is Senior

Python 的 __str__ 函数是生成对象可理解的字符串表示形式的有效工具。在类中使用和自定义 __str__ 将极大地提高代码的可读性和可用性,使您和其他人更容易理解和调试代码。无论您设计系统的复杂性如何,__str__ 方法都是编写更清晰、更易于管理的代码的最佳实践。