def __repr__(self):
return '<%s %s (%s:%s) %s>' % (
self.__class__.__name__, self.urlconf_name, self.app_name,
self.namespace, self.regex.pattern)
这个方法的意义/目的是什么?
def __repr__(self):
return '<%s %s (%s:%s) %s>' % (
self.__class__.__name__, self.urlconf_name, self.app_name,
self.namespace, self.regex.pattern)
这个方法的意义/目的是什么?
__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)
_
str__
是应该可读性良好的输出:__repr__
应该是供Python解释器阅读的表示(即将字符串提供给解释器应该重新创建对象)。但是,如果一个对象没有__str__
方法,那么会使用__repr__
代替。另外需要注意的是:这个示例实际上打印了self.x
和self.y
的__str__
方法:在字符串格式化操作中应该使用%r
而不是%s
(由于类未定义__str__
,因此实际上返回的是__repr__
,但这是一种异常情况)。 - Daniel Anderssonstackoverflow
,但repr('stackoverflow')是'stackoverflow'
。 - Tyler__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__
函数。
文档, 如果您愿意的话
__str__
存在的原因。 - nbro以下是一个例子,可以看到它们之间的区别(我从这个来源复制),
>>> x=4
>>> repr(x)
'4'
>>> str(x)
'4'
>>> y='stringy'
>>> repr(y)
"'stringy'"
>>> str(y)
'stringy'
repr()
和str()
对于int x
的返回值是相同的,但对于str y
的返回值却有所不同——一个是正式的,另一个是非正式的。正式和非正式表示之间最重要的差异之一是,对于str值的__repr__
默认实现可以作为eval的参数调用,并且返回值将是一个有效的字符串对象,如下所示:>>> repr(y)
"'a string'"
>>> y2=eval(repr(y))
>>> y==y2
True
__str__
的返回值作为eval函数的参数进行调用,则结果将无效。对于您实现的每个类,都要实现repr。不应该有任何借口。 对于那些您认为可读性比非歧义性更重要的类,请实现str。
请参考此链接:https://www.pythoncentral.io/what-is-the-difference-between-str-and-repr-in-python/