\

Pythonの__str____repr__は、ともにクラスで定義できる特殊なメソッドです。これらのメソッドは、オブジェクトを文字列形式に変換するために使用されますが、それぞれ異なる目的と使用場面があります。

__str__メソッド

__str__メソッドは、オブジェクトの「ユーザーフレンドリー」な文字列表現を生成します。これは、エンドユーザーに表示するためのもので、人間にとって理解しやすい形式であることが期待されます。

class Sample:
    def __str__(self):
        # 処理
s = Sample()
str(s)

上記のコードでは、str(s)Sampleクラスの__str__メソッドを呼び出します。

__repr__メソッド

一方、__repr__メソッドは、「開発者フレンドリー」な文字列表現を生成します。これは、Pythonのrepr()組み込み関数によって呼び出され、可能な限りオブジェクトをそのまま再現できる(つまり、eval()で評価すると元のオブジェクトに戻る)文字列表現を返すことが期待されます。

class Sample:
    def __repr__(self):
        # 処理
s = Sample()
repr(s)

上記のコードでは、repr(s)Sampleクラスの__repr__メソッドを呼び出します。

__str__と__repr__の使い分け

__str____repr__の主な違いは、その目的と使用場面にあります。__str__は、人間が読みやすい形式でオブジェクトを表現するためのもので、主にエンドユーザー向けの出力に使用されます。一方、__repr__は、Pythonがオブジェクトを復元できる形式でオブジェクトを表現するためのもので、主にデバッグや開発者向けの出力に使用されます。

以下に、これらのメソッドの使用例を示します。

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age

    def __str__(self):
        return f'名前は{self._name} 年齢は{self._age}'

    def __repr__(self):
        return f'Person(\"{self._name}\", {self._age})'

p = Person('Alice', 10)
print(str(p))  # 名前はAlice 年齢は10
print(repr(p))  # Person("Alice", 10)
p2 = eval(repr(p))
print(str(p2))  # 名前はAlice 年齢は10

この例では、__str__メソッドは人間が理解しやすい形式でPersonオブジェクトを表現し、__repr__メソッドはPythonがPersonオブジェクトを復元できる形式でオブジェクトを表現しています。

以上がPythonの__str____repr__メソッドの基本的な違いと使い分けについての説明です。これらの理解は、Pythonでクラスを定義し、そのインスタンスを適切に表現するために重要です。

投稿者 admin

コメントを残す

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