为什么定义了 __repr__ 方法就可以正常输出列表里的对象了,__str__方法没被运行吗
时间: 2023-07-31 09:13:58 浏览: 73
Python 的 __str__ 和 __repr__ 方法对比
当你打印一个列表时,默认会调用列表中每个元素的 `__repr__` 方法来获取它们的字符串表示。如果一个对象没有定义 `__repr__` 方法,Python 会使用默认的内置 `__repr__` 方法来返回对象的地址表示。
在你的代码中,当你将 `stu` 实例添加到 `list` 中时,`list` 中的元素会调用 `stu` 实例的 `__repr__` 方法来获取它的字符串表示。因此,即使你定义了 `__str__` 方法,但在这种情况下,它并不会被调用。
如果你想要在打印列表时使用 `__str__` 方法而不是 `__repr__` 方法,你可以直接打印列表中的对象,而不是打印整个列表。
以下是一个示例代码:
```python
class s:
def __init__(self, student, age, address):
self.student = student
self.age = age
self.address = address
def __str__(self):
return f"{self.student}, {self.age}, {self.address}"
stu = s(1, 2, 3)
lst = []
lst.append(stu)
print(lst[0]) # 直接打印对象,输出: 1, 2, 3
```
在上面的代码中,我们直接打印了列表中的对象 `lst[0]`,这样就会调用对象的 `__str__` 方法来获取字符串表示,而不是使用默认的地址表示。输出是对象的属性值 "1, 2, 3"。
阅读全文