Python 的__str__ 方法和 __repr__ 方法

在 Python 中,__str__ 方法和 __repr__ 方法都是用于定义对象的字符串表示方式,但它们有不同的用途和规范。

__str__ 方法

  • 用途:提供一个对象的可读性好的字符串表示,适用于展示给最终用户。
  • 设计目标:生成一个对用户友好的字符串表示。
  • 使用场景:当使用 print()str() 函数时会调用 __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'

__repr__ 方法

  • 用途:提供一个对象的官方字符串表示,通常包含足够的信息来精确地重建该对象。理想情况下,该字符串表示可以传递给 eval() 来重新创建对象。
  • 设计目标:生成一个对开发者友好的字符串表示,用于调试和开发。
  • 使用场景:当直接在解释器中查看对象或使用 repr() 函数时会调用 __repr__ 方法。
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f'Person(name={self.name!r}, age={self.age!r})'

选择 __repr__ 方法的原因

如果必须在 __str____repr__ 中二选一,推荐实现 __repr__ 方法,主要有以下几个原因:

  1. 信息完整性__repr__ 方法设计的目标是提供尽可能多的信息,有助于调试和开发。
  2. 开发便利性:当对象在解释器中被直接调用时,__repr__ 的输出会更有用。
  3. 广泛应用:如果只实现 __repr__ 方法且没有定义 __str__ 方法,__repr__ 方法也会在调用 str()print() 函数时被使用。

示例

下面是一个实现了 __repr__ 方法的示例类:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f'Person(name={self.name!r}, age={self.age!r})'

# 使用示例
p = Person("Alice", 30)
print(p)        # 输出:Person(name='Alice', age=30)
print(str(p))   # 输出:Person(name='Alice', age=30)
print(repr(p))  # 输出:Person(name='Alice', age=30)

这样,无论是使用 print()str() 还是直接在解释器中查看对象,都会得到详细和有用的字符串表示。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值