__str__和__repr__的目的是什么?

我真的不明白Python的用途__str____repr__用途。我的意思是,我得到的__str__返回对象的字符串表示形式。但是我为什么需要那个呢?在什么用例情况下?另外,我读到有关__repr__

但是我不明白的是,我将在哪里使用它们?


汪汪一只猫
浏览 579回答 3
3回答

婷婷同学_

经常使用它们的一个地方是互动会话。如果您打印一个对象,则将__str__调用其方法,而如果您仅使用一个对象,__repr__则会显示该对象:>>> from decimal import Decimal>>> a = Decimal(1.25)>>> print(a)1.25&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <---- this is from __str__>>> aDecimal('1.25')&nbsp; &nbsp; &nbsp; &nbsp;<---- this is from __repr__的__str__目的是尽可能使人可读,而的__repr__目的应该是可以用来重新创建对象的内容,尽管在这种情况下,它通常不是创建对象的确切方式。两者__str__并__repr__返回相同的值(对于内置类型肯定是这样)也很常见。

宝慕林4294392

建立在先前的答案之上,并显示更多示例。如果使用正确,则str和之间的区别repr很明显。总之repr应当返回一个可复制粘贴到重建对象的确切状态的字符串,而str为有用logging和observing调试结果。以下是一些示例,以查看某些已知库的不同输出。约会时间print repr(datetime.now())&nbsp; &nbsp; #datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)print str(datetime.now())&nbsp; &nbsp; &nbsp;#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]))&nbsp; #[1 2 3 4 5]在Numpy中,它又repr可以直接消费。自定义Vector3示例class Vector3(object):&nbsp; &nbsp; def __init__(self, args):&nbsp; &nbsp; &nbsp; &nbsp; self.x = args[0]&nbsp; &nbsp; &nbsp; &nbsp; self.y = args[1]&nbsp; &nbsp; &nbsp; &nbsp; self.z = args[2]&nbsp; &nbsp; def __str__(self):&nbsp; &nbsp; &nbsp; &nbsp; return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)&nbsp; &nbsp; def __repr__(self):&nbsp; &nbsp; &nbsp; &nbsp; return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)在此示例中,repr再次返回可以直接使用/执行的字符串,而str作为调试输出更为有用。v = Vector3([1,2,3])print str(v)&nbsp; &nbsp; &nbsp;#x: 1, y: 2, z: 3print repr(v)&nbsp; &nbsp; #Vector3([1,2,3])有一点要记住,如果str没有定义,但是repr,str会自动调用repr。因此,至少定义一个总是好的repr
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python