python中__repr__与__str__方法详解
作者:小小小小祥
本文主要介绍了python中__repr__与__str__方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
__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__
到此这篇关于python中__repr__与__str__方法详解的文章就介绍到这了,更多相关python __repr__ __str__内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
