说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
__repr__ 和 __str__ 是 Python 中的两个特殊方法,它们都用于返回对象的字符串表示,但它们的功能和目的有所不同。尽管这两个方法的返回值都可以是字符串,但它们的使用场景和目标对象(用户 vs. 开发者)有所区分。
__repr__ 和 __str__ 的主要区别| 特性 | __str__() |
__repr__() |
|---|---|---|
| 目的 | 面向用户友好的显示,生成可读性强的字符串 | 面向开发者,生成精确的表示,通常用于调试 |
| 输出格式 | 生成一个简洁、易读的字符串输出 | 生成一个能够精确表示对象的字符串,通常包含更多细节 |
是否用于 eval() |
不保证输出可以通过 eval() 重新创建对象 |
如果实现得当,返回值可以通过 eval() 重建对象 |
| 常见用途 | 向用户展示对象,或用于 print() 输出 |
用于调试,开发者可以通过它了解对象的内部结构 |
| 默认实现 | 如果没有定义,返回 <object> 格式的输出 |
如果没有定义,返回类似 <__main__.ClassName object at 0x...> 的格式 |
| Python 的内建类型 | 针对内建类型(如字符串、列表、字典等)提供友好的格式 | 针对内建类型提供详细的、可用于调试的格式 |
__str__ 的详细说明__str__ 是 Python 中用于生成用户友好字符串表示的方法,通常用于输出到屏幕或以人类易读的方式展示对象的状态。它是 print() 函数和 str() 函数的核心。
示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person: {self.name}, {self.age} years old"
person = Person("Alice", 30)
print(str(person)) # 输出: Person: Alice, 30 years old
如果没有定义 __str__,则 print() 或 str() 会调用默认的 __str__ 方法,该方法返回对象的内存地址信息(例如 <__main__.Person object at 0x...>)。
__repr__ 的详细说明__repr__ 是用于生成开发者友好字符串表示的方法。它通常用于调试和日志记录,其目标是生成一种能够准确描述对象的格式,甚至可以通过该字符串重新创建该对象(如果实现得当)。__repr__ 的输出更侧重于提供足够的信息以便开发者能够理解和调试对象。
示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person('{self.name}', {self.age})"
person = Person("Alice", 30)
print(repr(person)) # 输出: Person('Alice', 30)
如果没有定义 __repr__,则 repr() 会返回类似 <__main__.Person object at 0x...> 的信息,表示对象的内存地址。
__str__ 和 __repr__ 的配合使用有时你希望在输出时既能满足开发者调试需求,又能为用户提供友好的输出。你可以同时实现这两个方法。如果同时定义了这两个方法,Python 会优先调用 __str__,当使用 str() 或 print() 时。
示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person: {self.name}, {self.age} years old"
def __repr__(self):
return f"Person('{self.name}', {self.age})"
person = Person("Alice", 30)
# 用户友好的输出
print(person) # 输出: Person: Alice, 30 years old
# 开发者友好的输出
print(repr(person)) # 输出: Person('Alice', 30)
__repr__ 和 __str__ 的默认实现如果没有显式地定义 __str__ 和 __repr__,Python 会提供默认实现:
__str__ 默认返回 <object> 格式。__repr__ 默认返回 <__main__.ClassName object at 0x...> 格式。示例:没有定义 __str__ 和 __repr__
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Alice", 30)
print(str(person)) # 输出: <__main__.Person object at 0x...>
print(repr(person)) # 输出: <__main__.Person object at 0x...>
__str__ 和 __repr____str__ 主要用于:print() 和 str() 配合使用,以便展示对象。__repr__ 主要用于:__repr__ 的返回值应该是一个合法的 Python 表达式,可以通过 eval() 重建该对象。__str__ 旨在提供面向用户的友好输出,通常简单、易读。__repr__ 旨在提供开发者友好的详细输出,通常更加准确,能帮助开发者调试。更新时间:2024-12-03 07:12:12 标签:python 特殊方法 str repr