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__ 则侧重于精确性和可重构性。在实际编程中,根据需要可以定义其中一个或同时定义两者,以满足不同的应用场景。

 

posted on 2024-05-19 14:07  bruce_he  阅读(5)  评论(0编辑  收藏  举报