首页  >  文章  >  后端开发  >  Python 中“__repr__”的用途是什么?它与“__str__”有何不同?

Python 中“__repr__”的用途是什么?它与“__str__”有何不同?

Susan Sarandon
Susan Sarandon原创
2024-11-03 18:41:29468浏览

What is the purpose of `__repr__` in Python and how does it differ from `__str__`?

揭开Representer的面纱:探索repr

Python庞大的面向对象能力的生态系统被一系列多方面的 dunder 方法,每种方法都经过精心设计,以满足特定需求。在这个万神殿中存在着神秘的 __repr__,它是一个笼罩在神秘之中的神秘实体,对于对象表示领域至关重要。

将自己视为一个勇敢的调查员,肩负着解开 __repr__ 之谜的任务。您的探索从检查其解剖结构开始,如所提供的复杂代码片段所示:

<code class="python">def __repr__(self):
  return '<%s %s (%s:%s) %s>' % (
    self.__class__.__name__, self.urlconf_name, self.app_name,
    self.namespace, self.regex.pattern)</code>

repr 的神秘语法隐藏了深刻的目的。它使物体能够清晰地表达其内在自我,将其本质提炼成清晰的格式。这种表现形式超越了单纯的视觉吸引力的限制。它充当重新创建物体的蓝图,使其能够从其象征性的化身中复活。

repr的意义超出了其作为复苏器的作用。它是在交互式 shell 中呈现对象的首选渠道,是供程序员修补和探索的交互式游乐场。通过重写 __repr__,您可以自定义对象的描绘方式,将它们从神秘的实体转变为可理解的同伴。

但是,repr 的职责以 str__ 的统治结束开始。 __repr 优先考虑开发人员友好的表示,而 str 则承担起迎合最终用户的责任。它力求打造一种与人类情感产生共鸣的表示形式,一种描绘出清晰简洁的图画的解释。

为了说明细微差别,请考虑以下代码片段:

<code class="python">class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y
    def __repr__(self):
        cls = self.__class__.__name__
        return f'{cls}(x={self.x!r}, y={self.y!r})'</code>

调用repr 生成为开发人员量身定制的输出:

>>> p = Point(1, 2)
>>> print(repr(p))
Point(x=1, y=2)  # Developer-centric representation

相比之下,str 生成更加用户友好的再现:

>>> print(str(p))
(1, 2)  # User-friendly representation

因此,repr 成为制作定制对象表示的不可或缺的工具,也是调试和内省的工具。它揭示了物体的内部运作方式,揭开了它们的复杂性并促进它们的复活。它的同伴 __str__ 承担翻译者的角色,以符合人类理解的形式呈现对象。这些 dunder 方法共同编排了 Python 对象表示的充满活力的挂毯,使开发人员能够以信息丰富且用户友好的方式与对象进行交互。

以上是Python 中“__repr__”的用途是什么?它与“__str__”有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn