web-dev-qa-db-ja.com

Python)でオブジェクトのリストを出力するときに__str__関数を適用する方法

このインタラクティブなpythonコンソールスニペットはすべてを教えてくれます:

>>> class Test:
...     def __str__(self):
...         return 'asd'
...
>>> t = Test()
>>> print(t)
asd
>>> l = [Test(), Test(), Test()]
>>> print(l)
[__main__.Test instance at 0x00CBC1E8, __main__.Test instance at 0x00CBC260,
 __main__.Test instance at 0x00CBC238]

基本的に、リストを印刷するときに3つのasd文字列を印刷したいと思います。 pprintも試しましたが、同じ結果が得られます。

32
dvim

試してください:

class Test:
   def __repr__(self):
       return 'asd'

そしてこれを読んでください ドキュメントリンク

40
gruszczy

___repr___を実装するための他の回答の提案は、間違いなく1つの可能性です。何らかの理由(既存のタイプ、美的以外の理由で必要な___repr___など)でそれが実行不可能な場合は、

_print [str(x) for x in l]
_

または、一部の人が示唆しているように、map(str, l)(もう少しコンパクト)。

9
Alex Martelli

___repr___メソッドを作成する必要があります。

_>>> class Test:
    def __str__(self):
        return 'asd'
    def __repr__(self):
        return 'zxcv'


>>> [Test(), Test()]
[zxcv, zxcv]
>>> print _
[zxcv, zxcv]
_

docs を参照してください:

object.__repr__(self)

repr()組み込み関数および文字列変換(逆引用符)によって呼び出され、オブジェクトの「公式」文字列表現を計算します。可能であれば、これは有効なPython式のようになり、同じ値でオブジェクトを再作成するために使用できます(適切な環境が与えられた場合)。これが不可能な場合は、次の文字列_<...some useful description...>_の形式を返す必要があります。戻り値は文字列オブジェクトである必要があります。クラスが__repr__()を定義しているが__str__()を定義していない場合、__repr__()はそのクラスのインスタンスの「非公式」文字列表現が必要な場合にも使用されます。

これは通常、デバッグに使用されるため、表現が情報が豊富で明確であることが重要です。

3
Mark Rushakoff