Python 什么是__str__和__repr__的区别

Python 什么是strrepr的区别

在本文中,我们将介绍Python中strrepr的区别及其用法。在Python中,strrepr都是用于自定义对象的字符串表示形式的方法。它们可以以不同的方式返回对象的字符串表示,但在某些情况下具有不同的默认行为。

阅读更多:Python 教程

str方法

str方法用于返回对象的“非正式”或“友好”字符串表示形式。它的主要目的是为了方便人类阅读和理解对象的信息。当我们打印一个对象时,str方法会被自动调用,并返回描述对象的字符串表示。

以下示例说明了如何使用str方法:

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

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

person = Person("John", 25)
print(person)  # 输出:Person(name=John, age=25)
Python

在上面的示例中,我们定义了一个Person类,并在该类中编写了str方法。当我们打印person对象时,str方法被调用,并返回一个描述对象的字符串。

repr方法

str方法不同,repr方法用于返回对象的“官方”字符串表示形式。它的主要目的是为了在调试和开发过程中提供对象的具体信息,以便于重建对象。

以下示例说明了如何使用repr方法:

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})"

person = Person("John", 25)
print(person)  # 输出:Person(name=John, age=25)
Python

在上面的示例中,我们使用repr方法返回了与str方法相同的字符串。通常情况下,str方法和repr方法可以返回相同的字符串,但它们的默认行为是不同的。

区别和使用场景

尽管strrepr可以返回相同的字符串,它们在默认情况下有不同的行为以及在使用场景上的不同。

默认行为:

  • str方法未定义时,Python将调用repr方法来代替;
  • repr方法未定义时,Python会使用默认的repr实现,返回对象的类名和内存地址。

使用场景:

  • 当我们希望在打印对象时获得更加友好和可读的输出时,应该使用str方法。
  • 当我们需要在调试和开发过程中提供对象的具体信息时,应该使用repr方法。
  • 当我们希望对象的字符串表示具有一致性时,可以让repr方法返回与str方法相同的字符串。

以下示例说明了strrepr在不同使用场景下的不同行为:

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

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

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

person = Person("John", 25)

print(person)  # 输出:Person(name=John, age=25)
print(str(person))  # 输出:Person(name=John, age=25)
print(repr(person))  # 输出:Person(name='John', age=25)
Python

在上面的示例中,str方法返回一个友好和可读的字符串,而repr方法返回一个更加具体的字符串,包括单引号括起来的字符串值。

总结

在Python中,strrepr方法都用于定制对象的字符串表示形式。str方法返回对象的友好和可读字符串,而repr方法返回对象的官方字符串表示。它们的默认行为不同,在不同的使用场景下有不同的用途。了解并正确实现strrepr方法将有助于更好地理解和使用Python中的自定义对象。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册