python魔法方法`__repr__`和`__str__`魔法方法

用途

repr:用于将对象转换为可打印的字符串形式。

repr,全称是 representation(表示)。

示例

 1class Person:
 2    def __init__(self, name, age):
 3        self.name = name
 4        self.age = age
 5
 6    def __repr__(self):
 7        return f"Person({self.name}, {self.age})"
 8
 9# 创建一个Person对象
10person = Person("John", 20)
11
12# 使用repr()函数打印对象的__repr__方法返回的字符串
13print(person)

__str____repr__区别

在Python中,__str____repr__都是特殊方法,用于返回对象的字符串表示。它们的主要区别在于它们的目的和使用场景。

  • __str__方法的目的是为了提供一个用户友好的字符串表示,它应该返回一个易于理解的字符串,以便用户阅读。这个方法通常用于打印对象或者在日志中记录对象信息。如果没有为类定义__str__方法,Python会尝试使用__repr__方法作为备选。

  • __repr__方法的目的是提供一个完整且无歧义的字符串表示,这个表示应该能够用来重新创建对象。这个方法通常用于开发者调试和测试,因为它提供了对象的详细信息。如果可能,__repr__返回的字符串应该是一个有效的Python表达式,可以用来重新创建对象。

在实际使用中,__str____repr__的选择取决于你的目标受众。

  • 如果你的目标是为用户提供信息,那么应该优先使用__str__
  • 如果你的目标是为开发者提供信息,那么应该优先使用__repr__

以下是一个简单的例子,展示了如何在自定义类中实现__str____repr__方法:

 1class Person:
 2    def __init__(self, name, age):
 3        self.name = name
 4        self.age = age
 5
 6    def __str__(self):
 7        return f"Person named {self.name} is {self.age} years old."
 8
 9    def __repr__(self):
10        return f"Person(name='{self.name}', age={self.age})"
11
12# 使用__str__方法
13person = Person("Alice", 30)
14print(person) # 输出: Person named Alice is 30 years old.
15
16# 使用__repr__方法
17print(repr(person)) # 输出: Person(name='Alice', age=30)

在这个例子中,__str__方法返回了一个易于理解的字符串,适合用户阅读。而__repr__方法返回了一个更详细的字符串,包含了创建对象所需的所有信息,适合开发者使用。