python返回并通过类打印

时间:2013-08-29 12:16:58

标签: python

为什么第一个代码打印而第二个不打印?返回有什么特别之处吗?

In [339]: class fraction:
    def __init__(self,top,bottom):
        self.num=top
        self.den=bottom
    def __str__(self):
        return str(self.num)+"/"+str(self.den)
   .....:

In [340]: f=fraction(3,8)

In [341]: print(f)
3/8

In [342]: class fraction:
    def __init__(self,top,bottom):
        self.num=top
        self.den=bottom
    def __str__(self):
        print str(self.num)+"/"+str(self.den)
   .....:

In [343]: f=fraction(3,8)

In [344]: print(f)
3/8

TypeError                                 Traceback (most recent call last)
<ipython-input-344-d478acf29e40> in <module>()
----> 1 print(f)

TypeError: __str__ returned non-string (type NoneType)

3 个答案:

答案 0 :(得分:3)

当您在对象上调用print()时,解释器会调用对象的__str__()方法来获取其字符串表示。

print(f)被“扩展”为print( f.__str__() )

这里的打印功能:

def __str__(self):
        print str(self.num)+"/"+str(self.den)

被调用,打印并返回None,因此外部打印生成TypeError

所以,是的。您需要在__str__()方法中返回一个字符串。

答案 1 :(得分:2)

您需要修复:

def __str__(self):
        print str(self.num)+"/"+str(self.den)

要:

def __str__(self):
        return str(self.num)+"/"+str(self.den)

答案 2 :(得分:1)

TypeError: __str__ returned non-string (type NoneType)

告诉你__str__返回非字符串。
那是因为str必须返回一个字符串并在版本中:

def __str__(self):
    print str(self.num)+"/"+str(self.den)

您正在打印结果并返回 您必须像在版本1中一样返回字符串