__repr__ 方法的目的?

2025-01-08 08:50:00
admin
原创
80
摘要:问题描述:def __repr__(self): return '<%s %s (%s:%s) %s>' % ( self.__class__.__name__, self.urlconf_name, self.app_name, self.namespace, self.re...

问题描述:

def __repr__(self):
  return '<%s %s (%s:%s) %s>' % (
    self.__class__.__name__, self.urlconf_name, self.app_name,
    self.namespace, self.regex.pattern)

这个方法的意义/目的是什么?


解决方案 1:

__repr__应该返回对象的可打印表示,这很可能是创建此对象的可能方法之一。请参阅此处的官方文档。__repr__更适合开发人员,而更__str__适合最终用户。

一个简单的例子:

>>> 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})'
>>> p = Point(1, 2)
>>> p
Point(x=1, y=2)

解决方案 2:

Python 文档对此进行了很好的解释:

repr ( object ):返回一个包含对象可打印表示形式的字符串。这与转换(反向引号)产生的值相同。有时能够将此操作作为普通函数访问很有用。对于许多类型,此函数尝试返回一个字符串,该字符串将产生一个与传递给时具有相同值的对象eval(),否则表示形式是一个用尖括号括起来的字符串,其中包含对象类型的名称以及其他信息,通常包括对象的名称和地址。类可以通过定义__repr__()方法来控制此函数为其实例返回的内容。

所以您在这里看到的是的默认实现__repr__,它对于序列化和调试很有用。

解决方案 3:

__repr__被独立 Python 解释器用来以可打印格式显示类。例如:

~> python3.5
Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class StackOverflowDemo:
...     def __init__(self):
...         pass
...     def __repr__(self):
...         return '<StackOverflow demo object __repr__>'
... 
>>> demo = StackOverflowDemo()
>>> demo
<StackOverflow demo object __repr__>

如果__str__类中没有定义方法,它将调用该__repr__函数来尝试创建可打印的表示。

>>> str(demo)
'<StackOverflow demo object __repr__>'

此外,print()该类将__str__默认调用。


文档,如果你愿意的话

解决方案 4:

repr方法只是告诉 Python 如何打印某个类的对象

解决方案 5:

举个例子来看一下它们之间的区别(我从这个来源复制而来),

>>> x=4
>>> repr(x)
'4'
>>> str(x)
'4'
>>> y='stringy'
>>> repr(y)
"'stringy'"
>>> str(y)
'stringy'

repr()对于 来说,和 的返回值str()相同int x,但是 的返回值之间存在差异str y——一个是正式的,另一个是非正式的。正式表示和非正式表示之间最重要的区别之一是,__repr__str 值的 默认实现可以作为 eval 的参数调用,并且返回值将是一个有效的字符串对象,如下所示:

>>> repr(y)
"'a string'"
>>> y2=eval(repr(y))
>>> y==y2
True

如果您尝试将其返回值__str__作为 eval 的参数调用,则结果将无效。

解决方案 6:

为每个实现的类实现repr。不应该有任何借口。为你认为可读性比非歧义性更重要的类实现str 。

参考此链接: https: //www.pythoncentral.io/what-is-the-difference-between- str -and- repr -in-python/

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用