Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 报告方法的目的? def\uuu repr\uu(自): 返回“”%( self.\uuuuu类\uuuuuu.\uuuuuu名称,self.urlconf\u名称,self.app\u名称, self.namespace、self.regex.pattern)_Python - Fatal编程技术网

Python 报告方法的目的? def\uuu repr\uu(自): 返回“”%( self.\uuuuu类\uuuuuu.\uuuuuu名称,self.urlconf\u名称,self.app\u名称, self.namespace、self.regex.pattern)

Python 报告方法的目的? def\uuu repr\uu(自): 返回“”%( self.\uuuuu类\uuuuuu.\uuuuuu名称,self.urlconf\u名称,self.app\u名称, self.namespace、self.regex.pattern),python,Python,这种方法的意义/目的是什么?这在以下章节中得到了很好的解释: repr(对象):返回包含对象可打印表示形式的字符串。这与转换(反向引号)产生的值相同。能够作为普通函数访问此操作有时很有用。对于许多类型,此函数尝试返回一个字符串,该字符串在传递给eval()时将产生一个具有相同值的对象,否则,表示是一个尖括号中的字符串,其中包含对象类型的名称以及其他信息,通常包括对象的名称和地址。类可以通过定义\uu repr\uu()方法来控制此函数为其实例返回的内容 因此,您在这里看到的是的默认实现,它对序列

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

这在以下章节中得到了很好的解释:

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


因此,您在这里看到的是的默认实现,它对序列化和调试非常有用。

\uuuuu repr\uuuuu
应该返回对象的可打印表示形式,这很可能是创建此对象的可能方式之一。见正式文件<代码>\uuuu repr\uuuu更适合开发人员,而
\uuuuu str\uuuu
则适合最终用户

一个简单的例子:

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

\uuuu repr\uuu方法只是告诉Python如何打印类的对象,独立Python解释器使用该方法以可打印格式显示类。例如:

~>python3.5
Python 3.5.1(v3.5.1:37A07CEE59692015年12月5日21:12:44)
[GCC 4.2.1(苹果公司建造5666)(dot 3)]关于达尔文
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>类StackOverflowDemo:
...     定义初始化(自):
...         通过
...     定义报告(自我):
...         返回“”
... 
>>>demo=StackOverflowDemo()
>>>演示
如果类中未定义
\uuuuu str\uuuu
方法,它将调用
\uuuuuu repr\uuu
函数以尝试创建可打印的表示

str(演示版) '' 此外,默认情况下,
print()
ing类将调用
\uuuu str\uuu



,如果您愿意的话,

请举一个例子,看看它们之间的区别(我从中复制)

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

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

如果您试图调用
\uuuu str\uuuu
的返回值作为eval的参数,结果将无效。

当我们通过定义类来创建新类型时,我们可以利用Python的某些特性使新类便于使用。这些特征之一是“特殊方法”,也称为“魔术方法”

特殊方法的名称以两个下划线开头和结尾。我们定义它们,但通常不直接用名字来称呼它们。相反,它们在特定情况下自动执行

使用print语句可以方便地输出对象实例的值。当我们这样做时,我们希望在输出中以某种可以理解的明确格式表示值。可以使用repr特殊方法来安排发生这种情况。如果我们定义这个方法,当我们打印我们为其定义这个方法的类的实例的值时,它会被自动调用。不过,应该提到的是,还有一种特殊方法,用于类似但不完全相同的目的,如果我们也对其进行了定义,它可能会获得优先权

如果我们还没有定义Point3D类的repr方法,并且已经将my_point实例化为Point3D的实例,那么我们可以这样做

打印我的U点 ... 我们可以将其视为输出

不太好,嗯

因此,我们定义了reprstr特殊方法,或两者,以获得更好的输出

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

(1、2、3)
(1,2,3)

为您实现的每个类实现repr。不应该有任何借口。 对于您认为可读性比无歧义性更重要的类,实施str


参考此链接:

lazy1:我主要想修正格式(让示例尽可能与他们在示例会话中看到的内容相匹配是很有用的),但我还调整了输出格式,使其与作业明显不同,因为这大大提高了对这一点感到困惑的人的清晰度,imho。(如果我已经做了很多,只需重新编辑,我就欠你一杯啤酒。)省略了引用:这可能应该使用%r而不是%s:这不是真的正确<代码>\uuuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。但是,如果对象没有
\uuu str\uuu
方法,则使用
\uuu repr\uu
。同样值得注意的是:此示例实际上打印了
self.x
self.y
\uu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuucode>方法:
%r
应该在字符串格式化操作中使用
%r
,而不是
%s
(因为类没有定义
\uuuuuuuuuuu str uuuuuuuuuuuuuu
,实际上返回了
,但这是一个异常现象).是否每个类都在python中实现了repr?我认为反引号(或“反勾号”)
>>> repr(y)
"'a string'"
>>> y2=eval(repr(y))
>>> y==y2
True
**class Point3D(object):
    def __init__(self,a,b,c):
        self.x = a
        self.y = b
        self.z = c
    def __repr__(self):
        return "Point3D(%d, %d, %d)" % (self.x, self.y, self.z)
    def __str__(self):
        return "(%d, %d, %d)" % (self.x, self.y, self.z)
my_point = Point3D(1, 2, 3)
print my_point # __repr__ gets called automatically
print my_point # __str__ gets called automatically**