在 PyCharm 调试时,当需要显示一个对象的值时,它会调用对象的 __repr__()
方法或 __str__()
方法。具体来说:
- 优先调用
__repr__()
:- PyCharm 首先尝试调用对象的
__repr__()
方法。 __repr__()
是一个为开发者设计的方法,应该返回一个 精准且完整 的字符串,能够唯一标识这个对象,通常以<ClassName at 0x...>
这样的格式显示。
- PyCharm 首先尝试调用对象的
__repr__()
不可用时调用__str__()
:- 如果对象未定义
__repr__()
,PyCharm 会尝试调用__str__()
方法。 __str__()
是为用户设计的方法,应该返回一个 简洁且可读性更高 的字符串。
- 如果对象未定义
- 默认行为:
- 如果对象未定义
__repr__()
和__str__()
方法,Python 会使用其默认实现,即基类object
的__repr__()
方法。它通常返回类似<ClassName object at 0x...>
的内容。
- 如果对象未定义
示例
以下代码可以帮助理解 PyCharm 调用 __repr__()
和 __str__()
的行为:
class MyClass:
def __repr__(self):
return "MyClass(repr)"
def __str__(self):
return "MyClass(str)"
# 在调试窗口中
obj = MyClass()
print(obj) # 输出会调用 __str__(): MyClass(str)