在Python3中,我们在哪里使用方法__str__和__repr__?

25 浏览
0 Comments

在Python3中,我们在哪里使用方法__str__和__repr__?

这个问题已经有答案了

__str__和__repr__有什么区别?

我真的不明白在Python中什么时候会使用到__str____repr__。我的意思是,我知道__str__返回对象的字符串表示形式。但是,我为什么需要它呢?在什么情况下使用?此外,我也了解__repr__的用法。

但我不明白的是,在哪些地方我需要使用它们?

admin 更改状态以发布 2023年5月22日
0
0 Comments

你经常会在交互式会话中同时使用这两个方法。如果你打印一个对象,那么它的__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__返回相同的值也不是件罕见的事情(特别是对于内置类型)。

0
0 Comments

__repr__

__repr__函数被内置的函数repr()和字符串转换(reverse quotes)方法调用,以计算对象的"official"字符串表达方式。如果可能的话,它应该看起来像一个Python表达式,可以用于在适当的环境中重新创建具有相同值的对象。

__str__

__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__

0