__str__和__repr__的目的是什么?

我真的不明白Python中使用了__str____repr__ 。 我的意思是,我得到__str__返回一个对象的string表示forms。 但为什么我需要这个? 在什么情况下使用? 另外,我读了关于__repr__的用法

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

__repr__

repr()内置函数和string转换(反引号)调用来计算对象的“官方”string表示forms。 如果可能的话,这应该看起来像一个有效的Pythonexpression式,可以用来重新创build一个具有相同值的对象(给定一个合适的环境)。

__str__

str()内置函数和print语句调用,以计算对象的“非正式”string表示forms。

如果你有一个类,可以使用__str__ ,并且每当你使用这个对象作为string的一部分的时候,你会想要一个信息/非正式的输出。 例如,您可以为Django模型定义__str__方法,然后在Djangopipe理界面中呈现该方法。 而不是像<Model object>的东西,你会得到一个人的名字和姓氏,事件的名字和date等。


__repr____str__是相似的,实际上有时是相同的(来自标准库的BaseSet类的sets.py ):

 def __repr__(self): """Return string representation of a set. This looks like 'Set([<list of elements>])'. """ return self._repr() # __str__ is the same as __repr__ __str__ = __repr__ 

一个地方你使用他们很多是在一个互动的会议。 如果你打印一个对象,那么它的__str__方法将被调用,而如果你只是__repr__使用一个对象,那么它的__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__目标应该是可以用来重新创build对象的东西,尽pipe在这种情况下它通常不会是如何创build的。

__str____repr__返回相同的值(对于内置types肯定也是这样)。

Grass when当有疑问时去山上 读古文 。 在他们中你会发现__repr __()应该:

如果可能的话,这应该看起来像一个有效的Pythonexpression式,可以用来重新创build一个具有相同值的对象。