calendarcodediamondfacebookfingerglobalgoogleplushatenahomepagetopplainpocketrssservicetwitterwordpresshome2searchfoldernext-arrowback-arrowfirst-arrowlast-arrow

Python : __str__() と __repr__() は、オブジェクトを文字列で表現する

__str__()__repr__()は、どちらもオブジェクトの文字列表現を返す特殊メソッドである。

エンジニア速報は Twitter の@commteで 1 日 5 回配信しています。

Sponsored Link

__str__()__repr__()のポイント

  • __str__()は、オブジェクトを文字列で表現する特殊メソッド
  • __str__()は、print()に渡された場合に呼ばれる
  • str()はユーザーが分かりやすい形で表示される
  • repr()は引数にシングルクォーテーションマークを付けて返す

__repr__()は、組み込み関数の repr()が呼び出される。print()に渡された場合は、__str__()が呼ばれる。

その前に str()と repr() の違いについて説明しておく。

str()と repr() の違い

str()は、object の 文字列、つまりユーザーが分かりやすい形で表示され、repr()はオブジェクトの印字可能な表現を含む文字列を返す。

str('hoge') # 'hoge'

分かりやすくいうと、repr()は、引数にシングルクォーテーションマークを付けて返す。

repr('hoge') # ''hoge''

__str__()__repr__() の違い

__str__()について公式を翻訳した。

str(object)や,組み込み関数 format(),print()によって呼び出され,オブジェクトの "非公式 "またはきれいに印刷できる文字列表現を計算します.戻り値は、文字列オブジェクトでなければなりません。

このメソッドは object.__repr__() とは異なり、 __str__() が有効な Python 式を返すことは期待されていません: より便利で簡潔な表現が使用できます。

組み込み型の object で定義されたデフォルトの実装では、 object.__repr__() を呼び出します。

__str__()は、オブジェクトを文字列で表現する特殊メソッドである。str(object)や、組み込み関数の print()に渡された場合に呼ばれる。

次に、__repr__() について公式を翻訳した。

オブジェクトの文字列表現を計算するために repr() 組み込み関数によって呼び出されます。これは同じ値のオブジェクトを再生成するのに使用できる有効な Python の式のように見えるべきです。それができない場合は、<...some useful description...>という形式の文字列が返されます。

戻り値は、文字列オブジェクトでなければなりません。もし、あるクラスが__repr__()を定義していて、__str__()を定義していない場合、そのクラスのインスタンスの "非公式 "な文字列表現が必要な場合には、__repr__()も使用されます。

参考:3. Data model — Python 3.3.7 documentation

オブジェクト名のみを入力するとobject.__repr__()が呼ばれるので、以下のような結果となる。__repr__()は、組み込み関数の repr()が呼び出される。

a = 'hoge' a # 'hoge'

しかし、組み込み関数である print() を経由すると__str__()が呼ばれるので、上の結果と異なる。

a = 'hoge' print(a) # hoge

オブジェクトだとobject.__repr__()が呼ばれる。

class A: def __init__(self, x): self.x = x def __str__(self): return 'str' def __repr__(self): return 'repr' a = A(1) a # repr

print() を経由すると__str__()が呼ばれる。

class A: def __init__(self, x): self.x = x def __str__(self): return 'str' def __repr__(self): return 'repr' a = A(1) print(a) # str

Python おすすめ本

スポンサード リンク

Comments

Leave a Comment

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください