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(),也删除了“%”,引号也不见了,但是现在如何将百分比加回去而不出错呢?