Python的目的__repr__

zjm*_*126 123 python

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

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

laz*_*zy1 168

__repr__应该返回对象的可打印表示,很可能是创建此对象的可能方式之一.请参见官方文档在这里.__repr__适用__str__于最终用户的开发人员.

一个简单的例子:

>>> class Point:
...   def __init__(self, x, y):
...     self.x, self.y = x, y
...   def __repr__(self):
...     return 'Point(x=%s, y=%s)' % (self.x, self.y)
>>> p = Point(1, 2)
>>> p
Point(x=1, y=2)
Run Code Online (Sandbox Code Playgroud)

  • 这不是真的正确._`__str__`_是应该是人类可读的输出:`__repr__`应该是Python解释器可读的表示(即将字符串提供给解释器应该重新创建对象).但是,如果一个对象没有`__str__`方法,则使用`__repr__`代替.另外如上所述:这个例子实际上打印了`self_s`和`self.y`的`__str__`方法:在字符串格式化操作中应该使用`%r`代替`%s`(因为类没有定义`__str__`,`__repr__`实际上是返回的,但它是异常的). (38认同)
  • lazy1:我主要想修复格式化(让示例尽可能接近它们在示例会话中看到的内容很有用),但我也调整了输出格式以明确地与赋值不同,因为imho,大大提高了对此感到困惑的人的清晰度.(如果我走得很远,只需重新编辑,我就欠你一杯啤酒.) (2认同)
  • 省略了参考:http://docs.python.org/reference/datamodel.html#object.__repr__ (2认同)
  • python 中每个类都实现了 repr 吗? (2认同)

dma*_*oni 17

这在Python文档中得到了很好的解释:

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

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

  • 你有倒退,\ _\_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 见http://docs.python.org/reference/datamodel.html#object.%5F%5Frepr%5F%5F (6认同)
  • 我认为获取对象"表示"的反向引号(或"反引号")方法已被弃用,并且已针对3.0版删除 (5认同)

小智 11

__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__>
Run Code Online (Sandbox Code Playgroud)

__str__类中未定义方法的情况下,它将调用该__repr__函数以尝试创建可打印的表示.

>>> str(demo)
'<StackOverflow demo object __repr__>'
Run Code Online (Sandbox Code Playgroud)

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


文档,如果你愿意的话


Jas*_*oti 6

__repr__方法简单地告诉Python的打印类对象

  • 这不是真的。这就是 `__str__` 的用途。 (3认同)