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__が使われる
