3

重複の可能性:
Python:print()を使用してクラスまたはクラスのオブジェクトを出力する方法は?

私は現在このコードを持っています:

class Track(object):
    def __init__(self,artist,title,album=None):
        self.artist = artist
        self.title = title
        self.album = album

    def __str__(self):
        return self.title + self.artist + self.album

Track('Kanye West','Roses','Late Registration')ターミナルに何かを入れると、<__main__.Track object at 0x10f3e0c50>どうすればその場所の値を返すか印刷することができますか?

私はプログラミングに不慣れで、特に「オブジェクト指向プログラミング」に不慣れなので、私の質問はクラスとは正確には何ですか?クラス内で関数を定義するにはどうすればよいですか?

4

3 に答える 3

10

__repr__メソッドを定義する必要があります。

class Track(object):

    ...

    def __repr__(self):
        return ('Track(artist=%s album=%s title=%s)' 
                % (repr(self.artist), repr(self.title), repr(self.album)))

これで、ターミナルでオブジェクトの表現を確認できます。

>>> Track('Kanye West','Roses','Late Registration')
Track(artist='Kanye West' album='Roses' title='Late Registration') 

__str____repr__メソッドには違いがあることに注意してください。

  • __str__オブジェクトを文字列に変換する必要があります。呼び出し:str(obj)
  • __repr__-人間が読める形式の視覚化。呼び出し:repr(obj)

ターミナルに入れるとobj、Pythonはrepr自動的に関数を呼び出します。ただし、print obj式を使用する場合、Pythonは次のstr関数を呼び出します。

>>> obj
...repr of obj here...
>>> print obj
...str of obj here...

詳細については、ドキュメントを参照してください。

于 2012-10-09T14:13:59.953 に答える
3

コードは問題ありませんが、何かを忘れています。

このクラスがあるとしましょう:

class Bob():
    def __init__(self, hobby):
        self.hobby = hobby

コンソールで、次のような趣味を持つ Bob クラスを作成します。

a = Bob("skiing")

ボブの趣味を取得するには、次のようにします。

print a.hobby

今-あなたの問題に戻ります、あなたはしましたTrack('Kanye West','Roses','Late Registration')

オブジェクトを作成しましたが、オブジェクトを変数に割り当てていません。したがって、結果はオブジェクトそのものです...メソッドを呼び出すオブジェクトを単純に印刷できます__str__。それで...

print Track('Kanye West','Roses','Late Registration')

動作しますが、もう少しうまくやりたい場合。(例えば)

a = Track('Kanye West','Roses','Late Registration')
print a.title
print a.artist
print a.album
于 2012-10-09T14:20:47.660 に答える
0

オブジェクトの内部値を検査するためにデバッグ目的でこれが必要な場合は、次のようにすることができます

Track('Kanye West','Roses','Late Registration').__dict__

内部データ表現をpython dictとして表示します

于 2012-10-09T14:21:26.907 に答える