def __repr__(self): return '<%s %s (%s:%s) %s>' % ( self.__class__.__name__, self.urlconf_name, self.app_name, self.namespace, self.regex.pattern)
这种方法的意义/目的是什么?
这在 Python 文档中得到了很好的解释:
Repr (对象) : 返回一个包含对象的可打印表示的字符串。这与转换(反向引号)产生的值相同。能够以普通函数的形式访问这个操作有时是很有用的。对于许多类型,这个函数尝试返回一个字符串,这个字符串在传递给 eval()时会产生一个具有相同值的对象,否则这个表示就是一个包含在尖括号中的字符串,它包含对象类型的名称以及通常包含对象名称和地址的附加信息。类可以通过定义 __repr__()方法来控制此函数为其实例返回的内容。
eval()
__repr__()
因此,您在这里看到的是 __repr__的默认实现,它对于序列化和调试非常有用。
__repr__
__repr__应该返回该对象的可打印表示形式,最有可能的是 一创建该对象的方法。见官方文件 给你。__repr__更适合开发人员,而 __str__更适合终端用户。
__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)
不,不,不,不,不,不,不,不,不方法只是告诉 Python 如何打印类的对象
独立的 Python 解释器使用 __repr__以可打印格式显示类:
~> 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()ing 类将调用 __str__。
print()
文件 ,如果可以的话
一个示例来查看它们之间的差异(我是从 这个来源复制的) ,
>>> x=4 >>> repr(x) '4' >>> str(x) '4' >>> y='stringy' >>> repr(y) "'stringy'" >>> str(y) 'stringy'
对于 int x,repr()和 str()的返回值是相同的,但是对于 str y,返回值之间存在差异——一个是 正式的,另一个是 非正式的。正式表示和非正式表示之间最重要的区别之一是,str 值的 __repr__默认实现可以作为 eval 的参数调用,而返回值将是一个有效的字符串对象,如下所示:
int x
repr()
str()
str
y
>>> repr(y) "'a string'" >>> y2=eval(repr(y)) >>> y==y2 True
如果尝试调用 __str__的返回值作为 eval 的参数,结果将是无效的。
对每个实现的类实现 公司代表。不应该有任何借口。 对于那些您认为可读性对于非歧义性更为重要的类,实现 STR。
请参考此链接: https://www.pythoncentral.io/what-is-the-difference-between-str-and-repr-in-python/