Python的str和add输出
我有下面的示例代码,但是,Python的str和add输出,python,Python,我有下面的示例代码,但是,\uuuu add\uuu的输出与\uu str\uuu的输出看起来不一样。我需要所有输出与\uu str\uu输出格式完全相同 class Foo: def __init__(self,x,y=0): self.x = x self.y = y def __str__(self): return str(str(self.x/self.y) + "%") def __add__(self,othe
\uuuu add\uuu
的输出与\uu str\uuu
的输出看起来不一样。我需要所有输出与\uu str\uu
输出格式完全相同
class Foo:
def __init__(self,x,y=0):
self.x = x
self.y = y
def __str__(self):
return str(str(self.x/self.y) + "%")
def __add__(self,other):
if self.y > 50:
return str((self.x + other.x)/(self.y+other.y)) + "%"
else:
return str((self.x + other.x)/(self.y+other.y)) + "%"
\uuuu str\uuuu
输出如下所示:
>>> a = Foo(1,3)
>>> print(a)
>>> 0.33333%
\uuuu添加\uuuuu
输出:
>>> Foo(1,3) + Foo(0,0)
>>> '0.33333%'
为什么在我使用
\uuuuu add\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。当您打印字符串时,REPL不显示引号(并且它会抑制结果None
)
作为这种行为的一个最小示例,您可以尝试以下方法:
Python 3.2.4 (default, May 10 2013, 08:57:38)
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 'Hello'
>>> a
'Hello'
>>> print(a)
Hello
两次相同的字符串,一次显示带引号,一次不带引号
也考虑返回FO在你的代码中的一个实际实例。
class Foo:
def __init__(self, x, y=0):
self.x = x
self.y = y
def __str__(self):
return str(self.x / self.y) + "%"
def __add__(self, other):
return Foo(self.x + other.x, self.y + other.y)
通过这种方式,你可以做一些你不能用你的代码做的事情,例如Foo(1,2)+Foo(3,4)+Foo(5,6)
。这与你的自定义\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu添加方法或者甚至方法无关-这是交互式解释器的一个功能
通常,在Python脚本中,需要使用print
之类的工具来显示输出
然而,在交互式解释器中,有一个方便的快捷方式:您可以输入任意值,它将对其求值,并打印其结果的表示形式。这通常被称为一种错误
注意上面的区别:它打印的是结果的表示,而不是结果本身。这通常是(对于基本类型和公共对象)另一个将重新创建同一对象的Python表达式
因此,在字符串a='foo'
的情况下,字符串是foo
,但其表示形式是'foo'
:
>>> a = 'foo'
>>> print a
foo
>>> a
'foo'
为了获得对象的表示形式,Python调用(还有一个可以使用的速记)。不同之处在于,第一次您打印结果,第二次您的REPL只显示结果。当您打印字符串时,它不打印引号。如果\uuuu add\uuuu
返回了Foo
的实例,这不是很明智吗?这样您就可以执行Foo(1,2)+Foo(3,4)+Foo(5,6)
。为什么要添加到返回字符串?你不想让Foo+Foo=Foo吗?然后可以对结果调用str
。我从add中删除了str(),也删除了“%”,引号也不见了,但是现在如何将百分比加回去而不出错呢?