print
クラスのインスタンスを作成しようとすると、次のような出力が得られます。
>>> class Test():
... def __init__(self):
... self.a = 'foo'
...
>>> print(Test())
<__main__.Test object at 0x7fc9a9e36d60>
print
にカスタムのもの (たとえば、属性値を含むもの) が表示されるようにするにはどうすればよいでしょうか。つまり、クラスのインスタンスが印刷されたときにどのように表示されるか (その文字列表現)a
をどのように定義すればよいでしょうか。
見るクラス自体(クラスのインスタンスではない)のカスタム文字列表現を選択するにはどうすればよいですか?クラス自体の動作を定義する場合(この場合は、や類似のprint(Test)
ものではなく、カスタムのものが表示されます<class __main__.Test>
)。 (実際、この手法は本質的には同じですが、適用するのがより複雑です。)
ベストアンサー1
>>> class Test:
... def __repr__(self):
... return "Test()"
... def __str__(self):
... return "member of Test"
...
>>> t = Test()
>>> t
Test()
>>> print(t)
member of Test
の__str__
メソッドは、印刷時に呼び出されるものであり、__repr__
方法とは、repr()
関数(または対話型プロンプトで表示するとき)
メソッドが指定されていない場合__str__
、Python は代わりに の結果を出力します__repr__
。 を定義して__str__
を定義しない場合__repr__
、Python は上記の を として使用します__repr__
が、__str__
出力には を使用します。