pythonクラスの__str__と__repr__

pythonクラスの__str__と__repr__

クラスを作成したら__str__と__repr__を実装する。
__str__はstr()で呼び出した時や、print()で呼び出した時に実行される。人間にとって読みやすいようにフォーマットする。

__repr__はrepr()で呼び出した時や、インタラクティブなシェルでインスタンス名を入力したときに実行される。eval()で再利用可能な形式でフォーマットする。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MyClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __str__(self):
        return '[{0}({1})]'.format(self.name, self.age)
    def __repr__(self):
        return "MyClass('{0}','{1}')".format(self.name, self.age)

user01 = MyClass('John Doe', 35)
print(user01)
str(user01)
repr(user01)
user01

これで、

1
2
3
4
[John Doe(35)]
[John Doe(35)]
MyClass('John Doe','35')
MyClass('John Doe','35')

と出力される。
repr()が実装されているので、evalを呼び出すこともできる。

1
2
user02 = eval(repr(user01))
print(user02)

ちなみに、__str__と__repr__を実装しないとprintしたときに

1
<MyClass object at 0x03C01310>

のように出力される。

デバッグのしやすさから考えると、どちらも実装しておいた方が良い。

同じタグの記事
同じカテゴリの記事

コメントを残す

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

CAPTCHA