【Python】__repr__()メソッドを使ってインスタンスの中身を表示しよう

Programming

Pythonにはクラス内に定義でき、組み込み関数によって呼び出される__repr__()メソッドなるものがあります。
これを使うと簡単にそのクラスのインスタンスの中身を確認することができます。

__repr__()メソッドとは

 公式リファレンスによると

組み込み関数によって呼び出され、オブジェクトを表す「公式の (official)」文字列を計算します。可能なら、これは (適切な環境が与えられれば) 同じ値のオブジェクトを再生成するのに使える、有効な Python 式のようなものであるべきです。できないなら、 <...some useful description...> 形式の文字列が返されるべきです。戻り値は文字列オブジェクトでなければなりません。クラスが __repr__() を定義していて __str__() は定義していなければ、そのクラスのインスタンスの「非公式の (informal)」文字列表現が要求されたときにも __repr__() が使われます。

だそうで。
いまいちよく分かりにくいですが、簡単にいうとprintメソッドでインスタンスを表示しようとする時、そのインスタンス元のクラスの、どのメンバ変数を表示するかを指定できるメソッドになります。
これでも分かりにくいと思うので、実際のコードを見てみましょう。

__repr__()メソッドを用いてインスタンスの中身を表示

通常、


class Human:
    def __init__(self, age, sex, name):
        self.age = age
        self.sex = sex
        self.name = name

h = Human(30, 'M', 'John')
print(h)

このようにコードを書くと実行結果は


<__main__.Human instance at 93d710y821>

のようなものが出力されます。

しかし、__repr__メソッドを使い以下のようにコードを書くと


class Human:
    def __init__(self, age, sex, name):
        self.age = age
        self.sex = sex
        self.name = name
   
    def __repr__(self):
        return self.name

h = Human(30, 'M', 'John')
print(h)

John

と出力されます。

このように、__repr__メソッドはインスタンスの中身を自由自在に表示することが強者です。
デバッグの際に活用しましょう。

ちなみに、このクラスのメンバ変数全てを表示させたい時には


class Human:
    def __init__(self, age, sex, name):
        self.age = age
        self.sex = sex
        self.name = name
   
    def __repr__(self):
        return str((self.age, self.sex, self.name))

のように書けばOKでしょう!

コメント

タイトルとURLをコピーしました