Python __repr__ と __str__の違い

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です