__str__() 和 __repr__()区别
时间: 2023-07-21 13:43:05 浏览: 47
`__str__()` 和 `__repr__()` 都是 Python 中的内置函数,用于返回对象的字符串表示形式,但是它们有着不同的作用和使用场景。
`__str__()` 方法用于返回对象的“非正式”或“可读性较好”的字符串表示形式,通常用于将对象的信息打印出来或者展示给用户。如果一个对象没有定义 `__str__()` 方法,Python 会使用 `__repr__()` 方法来代替。
`__repr__()` 方法用于返回对象的“正式”或“详细”的字符串表示形式,通常用于调试或者开发者的内部使用。如果一个对象没有定义 `__repr__()` 方法,Python 会使用默认的实现来代替,这个默认的实现会返回一个包含类名和对象内存地址的字符串。
举个例子,假设我们有一个名为 `Person` 的类,其中包含了 `name` 和 `age` 两个属性,我们可以通过如下方式定义 `__str__()` 和 `__repr__()` 方法:
```python
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})"
```
在这个例子中,`__str__()` 方法返回了一个“非正式”的字符串表示形式,而 `__repr__()` 方法则返回了一个“正式”的字符串表示形式,其中使用了 `!r` 格式化选项来保证属性的字符串表示形式始终是合法的 Python 表达式。
下面是一个使用上述 `Person` 类的例子:
```python
person = Person("Tom", 20)
print(person) # 输出:Person(name='Tom', age=20)
print(repr(person)) # 输出:Person(name='Tom', age=20)
```
需要注意的是,`__str__()` 和 `__repr__()` 方法都应该返回字符串类型的数据,否则会抛出类型错误异常。