__repr__メソッドの使い方・修正方法を簡単に解説
Pythonの__repr__()
と__str__()
の使い分け
Pythonプログラムで最も一般的なタスクの一つは、データの表示です。プログラムは通常、この情報をプログラムのユーザーに表示します。しかし、プログラムは開発やメンテナンスを担当するプログラマにも情報を表示する必要があります。オブジェクトに関するプログラマが必要とする情報は、プログラムのユーザが同じオブジェクトを表示する方法とは異なるため、.__repr__()
と.__str__()
が登場します。
Pythonのオブジェクトには、特定の動作を提供するいくつかの特殊メソッドがあります。その中には、文字列表現を使用してオブジェクトを記述する2つの類似した特殊メソッド、.__repr__()
と.__str__()
があります。.__repr__()
メソッドは、コードを保守およびデバッグする必要があるプログラマに対して詳細な説明を返します。.__str__()
メソッドは、プログラムのユーザに対して簡単な説明と情報を返します。
.__repr__()
および.__str__()
メソッドは、クラスごとに定義できる特殊メソッドの一部です。これらのメソッドを定義することで、print()
関数、フォーマットされた文字列、対話的な環境など、さまざまな形式の出力でプログラムがオブジェクトをどのように表示するかを制御することができます。
このチュートリアルでは、.__repr__()
と.__str__()
をどのように区別し、これらの特殊メソッドを自分で定義する方法について学びます。これらのメソッドを効果的に定義することで、自分で定義したクラスがより読みやすく、デバッグやメンテナンスがしやすくなります。では、いつPythonの.__repr__()
と.__str__()
を選ぶべきでしょうか?
简単に言うと: プログラマは.__repr__()
を使用し、ユーザーは.__str__()
を使用する
.__repr__()
と.__str__()
という特殊メソッドは、どちらもオブジェクトの文字列表現を返します。文字列表現は、オブジェクトに関する情報を示す文字列です。この情報をプログラムのユーザーや他のプログラマのような異なる対象者に合わせて調整することができます。
他の先頭と末尾に2つのアンダースコアがある特殊メソッドと同様に、これらのメソッドを任意のクラスに定義することができます。
オブジェクトを表示するために2つのメソッドがある理由は、それぞれが異なる目的を持っているためです:
.__repr__()
は、プログラマ向けのオブジェクトの公式な文字列表現を提供します。.__str__()
は、ユーザー向けのオブジェクトの非公式な文字列表現を提供します。
.__repr__()
によって返される文字列表現の対象者は、プログラムを開発およびメンテナンスするプログラマです。一般的に、それはオブジェクトに関する詳細で明確な情報を提供します。公式な文字列表現のもう一つの重要な特性は、プログラマが通常、それを使用して元のオブジェクトと等しいオブジェクトを再作成することができることです。
.__str__()
メソッドは、プログラムのユーザーに対してターゲットを絞った文字列表現を提供します。対象者がPythonのプログラマでない場合でも、この表現は任意のユーザーが理解できるようになっています。