-1

最初のコードは出力されるのに、2 番目のコードは出力されないのはなぜですか? リターンについて何か特別なことはありますか?

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)
4

3 に答える 3

2

修正する必要があります:

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

に:

def __str__(self):
        return str(self.num)+"/"+str(self.den)
于 2013-08-29T12:19:14.467 に答える
1
TypeError: __str__ returned non-string (type NoneType)

__str__ が非文字列を返すことを示しています。
これは、str が文字列を返す必要があり、バージョンが次のようになっているためです。

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

結果を出力してNoneを返しています。
バージョン1と同じように文字列を返す必要があります

于 2013-08-29T12:34:27.170 に答える