为了账号安全,请及时绑定邮箱和手机立即绑定

__str__和__repr__的目的是什么?

__str__和__repr__的目的是什么?

汪汪一只猫 2019-10-28 18:47:50
我真的不明白Python的用途__str__和__repr__用途。我的意思是,我得到的__str__返回对象的字符串表示形式。但是我为什么需要那个呢?在什么用例情况下?另外,我读到有关__repr__但是我不明白的是,我将在哪里使用它们?
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

经常使用它们的一个地方是互动会话。如果您打印一个对象,则将__str__调用其方法,而如果您仅使用一个对象,__repr__则会显示该对象:


>>> from decimal import Decimal

>>> a = Decimal(1.25)

>>> print(a)

1.25                  <---- this is from __str__

>>> a

Decimal('1.25')       <---- this is from __repr__

的__str__目的是尽可能使人可读,而的__repr__目的应该是可以用来重新创建对象的内容,尽管在这种情况下,它通常不是创建对象的确切方式。


两者__str__并__repr__返回相同的值(对于内置类型肯定是这样)也很常见。


查看完整回答
反对 回复 2019-10-28
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

建立在先前的答案之上,并显示更多示例。如果使用正确,则str和之间的区别repr很明显。总之repr应当返回一个可复制粘贴到重建对象的确切状态的字符串,而str为有用logging和observing调试结果。以下是一些示例,以查看某些已知库的不同输出。


约会时间

print repr(datetime.now())    #datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)

print str(datetime.now())     #2017-12-12 18:49:27.134452

可以将str其打印到日志文件中,repr如果要直接运行该日志文件或将其作为命令转储到文件中,可以将其重新用途。


x = datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)

脾气暴躁的

print repr(np.array([1,2,3,4,5])) #array([1, 2, 3, 4, 5])

print str(np.array([1,2,3,4,5]))  #[1 2 3 4 5]

在Numpy中,它又repr可以直接消费。


自定义Vector3示例

class Vector3(object):

    def __init__(self, args):

        self.x = args[0]

        self.y = args[1]

        self.z = args[2]


    def __str__(self):

        return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)


    def __repr__(self):

        return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)

在此示例中,repr再次返回可以直接使用/执行的字符串,而str作为调试输出更为有用。


v = Vector3([1,2,3])

print str(v)     #x: 1, y: 2, z: 3

print repr(v)    #Vector3([1,2,3])

有一点要记住,如果str没有定义,但是repr,str会自动调用repr。因此,至少定义一个总是好的repr


查看完整回答
反对 回复 2019-10-28
  • 3 回答
  • 0 关注
  • 578 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信