__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一个具有相同值的对象。