拥有__str__
方法的目的是创建对象的字符串表示。__str__
应该返回一个字符串。如果 的实现__str__
改为打印字符串表示并且不返回任何内容,则当在字符串上下文中使用对象时TypeError
将引发 a 。举个例子:
def __str__(self):
print '%f/%f'%(self.num,self.den)
如果我们像这样显示一个分数对象:
f = Fraction(1,2)
print f
我们得到一个例外:
Traceback (most recent call last):
File "/Users/.../Desktop/...", line 13, in <module>
print f
TypeError: __str__ returned non-string (type NoneType)
>>>
这是因为__str__
用于获取对象的字符串表示形式,而不是打印它(按照惯例,只要返回字符串,您就可以打印)。这就是print
语句/函数与方法一起使用的目的__str__
。
另一方面,像这样的方法show
:
def show(self):
print(self.num,"/",self.den) #or even print(self) (for the last part of answer)
本质上等同print(f)
于上述情况(除了它在操作数旁边包含空格)。show
用于输出字符串表示,同时__str__
获取表示。
但是,在构造字符串表示时,可能会添加show
不合适/不必要的额外逻辑,因此同时使用这两种方法是有意义的。
但是,您可以使用类似show
whereprint
语句不合适的方法,即:
if f.show(): pass
if print(f): pass #raise exception