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__
方法返回了一个更详细的字符串,包含了创建对象所需的所有信息,适合开发者使用。