list
あなたのクラスが__str__
メソッドを持っているかどうかは関係ありません。
オブジェクトを印刷すると、print
はオブジェクトにstr
を呼び出し、適切な文字列を取得します。 str
関数は、オブジェクトの__str__
メソッドを呼び出そうとしますが、がの場合は、オブジェクトの__repr__
メソッドを呼び出します。そのオブジェクトのクラス定義内にある__repr__
の定義でない場合は、親クラスから継承されたものを取得します。通常は、object
タイプのデフォルト__repr__
になります。
list
とビルトインtuple
、set
とdict
などのコレクション__str__
方法を持っていない他の、あなたは、文字列に変換してみてください(明示的str
機能を使用して、または暗黙的にprint
のいずれかを介して)その__repr__
メソッドが呼び出されます。そして、それらの__repr__
メソッドは、コレクション内の各アイテムに対してrepr
を呼び出します。したがって、コレクションオブジェクトのいずれかをprint
に渡すと、アイテムのうち__repr__
が常に表示されます。そして明白にコレクションにstr
を呼び出すことは違いにはなりません。
list
またはコレクションにあるアイテムの__str__
の表示を確認するには、各アイテムについて明示的にstr
を呼び出してコレクションを繰り返し処理する必要があります。
ここには、これらの点を示す小さなコードスニペット(Python 2 & 3に適しています)があります。出力
3075508812 3075508812
[Test repr, Test repr] [Test repr, Test repr] [Test repr, Test repr]
Test str Test str Test repr
Test str Test str Test repr
from __future__ import print_function
class Test(object):
def __str__(self):
return 'Test str'
def __repr__(self):
return 'Test repr'
a = [Test(), Test()]
print(id(a.__repr__), id(a.__str__))
print(a, str(a), repr(a))
for u in a:
print(u, str(u), repr(u))
ですから、単一のエンティティとしてあなたのオブジェクトのリストを印刷できるようにしたいと、オブジェクトの文字列は、より人に優しいことがあれば、あなたはいくつかあります選択肢の:
変更__repr__
にご__str__
メソッドの名前。これは最も簡単な方法です。前述のように、オブジェクトがstr
に渡されたときに__str__
が見つからない場合、__repr__
が使用されます。
既存の__str__
メソッドだけを残して、より人間に優しい__repr__
を作成します。しかし、__repr__
は有用な情報をプログラマーに表示し、実際には__repr__
文字列をコピーして&のコピーをインタプリタまたはスクリプトに貼り付けてオブジェクトを再作成するとよいと示唆されています。
__str__
メソッドだけを残して、__str__
を呼び出す__repr__
を作成します。有効だが、これはちょっとばかげている。関連する戦略は__str__
を参照するクラス属性として__repr__
を設定することです。以下の例を参照してください。
は、あなたの代わりに何を期待していますか? –
if条件に関してオブジェクトのリストを出力することを期待しています。私は__str__メソッドを実装しました。十分ではありませんか? – Binary
そうです。 1つのPersonオブジェクトを含むリストを出力します。 Pythonがオブジェクトを出力するデフォルトの方法がわかります。 –