为什么第一个代码打印而第二个不打印?返回有什么特别之处吗?
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)
答案 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中一样返回字符串