说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注: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