Pythonの関数で、アンダースコア2つ __ (←これ) で囲まれている関数を、特殊関数と言います。特別な役割があります。
__repr__ と __str__ってどう違うの??といつもわからなくなってしまうので、メモしておきます。
下記のPython3の公式ドキュメントによると
https://docs.python.jp/3.3/reference/datamodel.html
object.__repr__(self)
repr()
組み込み関数によって呼び出され、オブジェクトを表す「公式の (official)」文字列を計算します。
object.__str__(self)
オブジェクトの「非公式の (informal)」あるいは表示に適した文字列表現を計算するために、 str(object)
と組み込み関数 format()
, print()
によって呼ばれます。
だ、そうですが。
なんやねん。公式とか非公式とか!!って思いますよね。
とりあえず、動作を見てみます。
class MC(): def __repr__(self): return 'Wahaha!' def __str__(self): return 'Uki' mc = MC() print(mc)
上記の出力結果は
Uki
となります。
class MC(): def __repr__(self): return 'Wahaha!' def __str__(self): return 'Uki' mc = MC() print(str(mc))
上記の出力結果も
Uki
となります。
__str__関数がない場合は
class MC(): def __repr__(self): return 'Wahaha!' mc = MC() print(str(mc))
__repr__が使われて、
Wahaha!
が出力されます。
下記のサイトさんによると、次のような動作です。
http://taustation.com/python3-str-repr/
print文やformat文での__str__
や__repr__
の使われ方は次の通り。
__str__
のみが定義されていれば__str__
が使われる__repr__
のみが定義されていれば__repr__
が使われる__str__
と__repr__
の両方が定義されていれば__str__
が使われる