2013-08-29 73 views
0

爲什麼第一個代碼打印,而第二個代碼不打印?返回有什麼特別的嗎?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) 
+0

您需要在第二個返回。 – badc0re

+0

@ badc0re:啊,就這樣!我坐在這裏眯着眼睛,試圖弄清楚這兩個階級如何不同。 | - } –

回答

3

當你調用一個對象上print()解釋調用對象的__str__()方法獲取其嚴格g代表。

print(f)得到「擴大」爲print(f.__str__())

打印功能在這裏:

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

被調用,打印和返回None,因此外打印生成TypeError

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

+0

謝謝,這有助於 – vinita

+0

不客氣=) –

2

您需要修改:

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

要:

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

他知道這樣做 - 這是兩次測試之間的唯一區別。他在問爲什麼 - 有什麼不同。 – neil

+0

好吧,這看起來並不像他在問什麼區別,如果他錯了,他可以發表評論。我對嗎? – badc0re

1
TypeError: __str__ returned non-string (type NoneType) 

告訴你__str__返回非字符串。
這是becouse STR必須返回一個字符串和版本:

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

要打印結果,並返回
您必須像版本1中那樣返回一個字符串