Python __str__ 和 __repr__
在Python中,__str__
和 __repr__
是两个非常重要的特殊方法,它们用于定义对象的字符串表示形式,但它们的用途和场景稍有不同:
__str__
方法
__str__
方法提供了对象的“人性化”字符串表示,它的目的是为了方便人类阅读和理解。当你使用 print()
函数打印一个对象,或者直接将对象用在字符串环境中(例如使用 %s
格式化字符串时),Python 会调用这个方法来获取对象的字符串形式。
理想的 __str__
返回值应该是清晰、易读的,适合终端用户查看。
例如:
class Person: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f"{self.name}, {self.age} years old" p = Person("Alice", 30) print(p) # 输出: Alice, 30 years old
__repr__
方法
__repr__
方法提供了对象的“官方”字符串表示,它的目的是为程序员提供一个准确且无歧义的对象描述,以便于调试和开发。当一个对象在交互式环境中未被正确格式化展示时(例如在Python解释器中直接输入对象名称),
Python 会调用 __repr__
方法来获取该对象的字符串表示。__repr__
的输出应该包含足够的信息,使得有经验的程序员能够重现这个对象。
理想的 __repr__
字符串应该是合法的Python表达式,这意味着在很多情况下,通过 eval()
执行 __repr__
的返回值应该能够得到一个与原对象相等的新对象。
class Person: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return f"Person('{self.name}', {self.age})" p = Person("Alice", 30) print(repr(p)) # 输出: Person('Alice', 30)
总结来说,__str__
更关注可读性和用户友好性,而 __repr__
则侧重于精确性和可重构性。在实际编程中,根据需要可以定义其中一个或同时定义两者,以满足不同的应用场景。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)