📜  __str__ 和 __repr__ 之间的区别 - Python (1)

📅  最后修改于: 2023-12-03 15:13:14.353000             🧑  作者: Mango

strrepr 之间的区别 - Python

在Python中,__str____repr__都是特殊的方法,用于更好地控制对象的字符串表示形式。虽然它们都可以用于获取对象的字符串表示形式,但它们之间有一些重要的区别。

__repr__

__repr__方法返回对象的string表示形式,用于开发人员调试阶段。它应该返回能够完全重现对象的Python表达式。

举个例子,假设有一个叫Person的类:

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

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

在这个类中,__repr__方法返回一个字符串,用于表示Person类实例。当我们在Python控制台中打印一个Person对象时,它将打印为类似于Person(name=John, age=30)这样的形式。

__str__

__str__方法是用于用户友好的字符串表示形式。它返回对象的string表示形式,用于最终用户。

例如,假设我们有一个类,它表示日期时间:

from datetime import datetime

class MyDateTime:
    def __init__(self, year, month, day, hour, minute):
        self.dt = datetime(year, month, day, hour, minute)

    def __str__(self):
        return self.dt.strftime('%Y-%m-%d %H:%M')

在这个类中,__str__方法返回一个形如'2022-09-23 14:30'的字符串,用户可以理解和使用。

区别
  • __repr__用于开发人员调试阶段,返回一个能够完全重现对象的Python表达式
  • __str__用于最终用户,返回一个可读性更高的字符串表示形式
  • 如果对象没有实现__str__方法,Python会寻找__repr__方法作为备选方法
  • 如果对象没有实现__repr__方法,Python会返回默认的<object classname at memoryaddress>字符串表示形式。
总结

在Python中,__str____repr__方法都是用于对象的字符串表示形式的特殊方法。虽然它们都可以返回字符串表示形式,但它们之间有重要的区别,应该根据使用场景进行选择。__repr__用于开发人员调试阶段,返回一个能够完全重现对象的Python表达式。__str__用于最终用户,返回可读性更高的字符串表示形式。