【python】中 __repr__ 与 __str__ 方法详解
_str__是用户友好的输出,返回一个易于理解的字符串__repr__是开发者友好的输出,返回一个更详细的、能够重建对象的字符串如果__str__没有定义,Python 会回退到使用__repr__
·
__str__
和 __repr__
是 Python 中两个非常重要的魔法方法,它们都用于定义对象的字符串表示,但各自的使用场景和目标有所不同。
1. __str__
:面向用户的字符串表示
- 目的:
__str__
主要用于为对象提供一个友好的、易于理解的字符串表示,通常是面向终端用户或者外部系统的输出。 - 用途:当你使用 print() 函数或者 str() 函数时,Python 会调用对象的
__str__
方法。它应该返回一个简洁、直观且易于阅读的字符串。
代码示例:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"Point at ({self.x}, {self.y})"
p = Point(3, 4)
print(p)
代码输出:
Point at (3, 4)
2. __repr__
:面向开发者的字符串表示
- 目的:
__repr__
的主要目的是为开发者提供一种无歧义的、尽可能详细的字符串表示,以便于调试和开发。它应该尽量返回一个能够重新构建该对象的字符串(或至少能够描述该对象)。 - 用途:
__repr__
通常用于调试、日志记录、交互式环境(如 Python shell),以及当你打印对象时,Python 会自动调用该方法。如果未定义__str__
方法,__repr__
会被用作 print() 输出的后备方法。
代码示例:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"Point(x={self.x}, y={self.y})"
p = Point(3, 4)
print(repr(p))
代码输出:
Point(x=3, y=4)
3. __str__
vs __repr__
:区别
特性 | __str__ |
__repr__ |
---|---|---|
目标 | 面向终端用户,简洁、友好、易读 | 面向开发者,详细、无歧义、可重建对象 |
输出格式 | 通常为简单的字符串描述,易于理解 | 返回尽可能完整的对象信息,通常包括类名和参数 |
用途 | 主要用于 print() 、str() 输出 |
主要用于调试、交互式环境、日志记录 |
默认行为 | 如果没有定义 __str__ ,Python 会调用 __repr__ |
如果没有定义 __repr__ ,Python 会调用默认的 __repr__ ,该默认方法返回一个类似 <__main__.ClassName object at 0x000000> 的表示 |
4. 综合示例
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"Point at ({self.x}, {self.y})"
def __repr__(self):
return f"Point(x={self.x}, y={self.y})"
# 创建一个 Point 对象
p = Point(3, 4)
# 面向用户的字符串表示
print(str(p)) # Output: Point at (3, 4)
# 面向开发者的字符串表示
print(repr(p)) # Output: Point(x=3, y=4)
总结
__str__
是用户友好的输出,返回一个易于理解的字符串__repr__
是开发者友好的输出,返回一个更详细的、能够重建对象的字符串- 如果
__str__
没有定义,Python 会回退到使用__repr__
更多推荐
所有评论(0)