在Python3中,我们在哪里使用方法__str__和__repr__?
在Python3中,我们在哪里使用方法__str__和__repr__?
这个问题已经有答案了:
我真的不明白在Python中什么时候会使用到__str__
和__repr__
。我的意思是,我知道__str__
返回对象的字符串表示形式。但是,我为什么需要它呢?在什么情况下使用?此外,我也了解__repr__
的用法。
但我不明白的是,在哪些地方我需要使用它们?
admin 更改状态以发布 2023年5月22日
你经常会在交互式会话中同时使用这两个方法。如果你打印一个对象,那么它的__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__
返回相同的值也不是件罕见的事情(特别是对于内置类型)。
__repr__
函数被内置的函数repr()
和字符串转换(reverse quotes)方法调用,以计算对象的"official"字符串表达方式。如果可能的话,它应该看起来像一个Python表达式,可以用于在适当的环境中重新创建具有相同值的对象。
__str__
函数被内置的函数str()
和打印语句调用,以计算对象的"informal"字符串表达方式。
如果您有一个类并且想要获得一个信息丰富/非正式的输出,以便在使用该对象作为字符串的一部分时进行操作,则可以使用__str__
方法。例如,您可以为Django模型定义__str__
方法,然后在Django管理界面中呈现该方法。您将获得人的名字,事件的名称和日期等,而不是像
这样的东西。
__repr__
和__str__
很相似,事实上有时是相同的(来自标准库中sets.py
中的BaseSet
类的示例):
def __repr__(self): """Return string representation of a set. This looks like 'Set([])'. """ return self._repr() # __str__ is the same as __repr__ __str__ = __repr__