2017-01-15 5 views
1
class Bird: 
    def __init__(self): 
     self.noise = "chirping" 
     self.beak = "closed" 
     self.wings = "closed" 
    def __str__(self): 
     msg = "The bird is ", self.noise "its beak is ", 
       self.beak "its wings are ", self.wings 
     return msg 
mybird = Bird() 
print(mybird) 

問題は何かを完全にはわかりませんが、私はこれを使ってBirdオブジェクトを印刷する必要があります。文字列と変数を変数に割り当てる方法

は私を与えた。これは、エラーのpythonです:

Traceback (most recent call last): 

    File "D:/000- Python-Coding/Practice/ bird object program.py", line 10, in <module> 

    print(mybird) 

TypeError: __str__ returned non-string (type tuple) 

答えて

1

あなたは+文字列を追加することができます。

msg = "The bird is " + self.noise + " its beak is " + self.beak + " its wings are " + self.wings 
+0

ああ..私は、私はそれを試してみましたと思ったが、おかげで、それは動作します。 – Anonymous

0

文字列を連結すること+を使用する:

msg = "The bird is " + self.noise + "its beak is " + self.beak + "its wings are " + self.wings 

ので、それだろう次のようになります。

class Bird: 
    def __init__(self): 
     self.noise = "chirping" 
     self.beak = "closed" 
     self.wings = "closed" 
    def __str__(self): 
     msg = "The bird is " + self.noise + "its beak is " + self.beak + "its wings are " + self.wings 
     return msg 
mybird = Bird() 
print(mybird) 

出力:

The bird is chirpingits beak is closedits wings are closed 
3

エラーメッセージが述べたように:

TypeError: __str__ returned non-string (type tuple) 

があなたの代わりに、文字列のタプルを構築したので、私はそうのように、文字列フォーマットを使用することをお勧め:

msg = "The bird is {}, its beak is {}, its wings are {}".format(self.noise, 
     self.beak, self.wings) 
1
TypeError: __str__ returned non-string (type tuple) 

はあなたにすべてを伝えます。上記のように、カンマで

 msg = "The bird is ", self.noise "its beak is ", self.beak "its wings are ", self.wings 

分離タプル(item1 , item2 , ...)を生成します。

文字列の連結は+で、文字列の書式は他の回答と同じです。

0

msgstr(文字列)ではなく、タプルです。確かに:あなたはおそらくしたいことは、あなたがプラスを使用して行うことができます部品を追加することである(+)オペレータ

msg = ("The bird is ", self.noise "its beak is ", self.beak "its wings are ", self.wings) 

msg = "The bird is ", self.noise "its beak is ", self.beak "its wings are ", self.wings 

は、式のコンマ区切りのリストで、Pythonはこれを解釈します。

msg = "The bird is "+self.noise+" its beak is "+self.beak+" its wings are "+self.wings 

それとも、string formattingを使用することができます。

msg = "The bird is %s its beak is %s its wings are "%(self.noise,self.beak,self.wings) 
+0

または、代わりに 'msg ="鳥は{}その嘴は{} "{}"です。フォーマット(self.noise、self.beak、self.wings) ' –

+0

@ Shiva:そうです。私は、OPがそれについてもっと読むことができ、文字列をどのようにフォーマットするかを決めることができるように、Pythonの文字列フォーマットに専念するウェブサイトへのリンクを提供しました。 –

0

あなたは__str__ fucntionから文字列を返す必要があります。

noise = "chirping" 
beak = "closed" 
wings = "close" 

msg = "The bird is ", noise, "its beak is ", beak, "its wings are ", wings 
type(msg) # <class 'tuple'> 
msg = "The bird is "+ noise+ "its beak is "+ beak+ "its wings are "+ wings 
type(msg) # <class 'str'> 
関連する問題