*__str__
と__repr__
オブジェクトが print()
や format()
などで呼び出された場合の、文字列形式を定義するメソッドです。__repr__
は主にデバッグで使用するためのメソッドなので、__str__
よりもより正式な内容を返却する必要があります。__str__
と__repr__
が両方存在している場合は、__str__
が呼ばれます。実際に挙動を確認してみます。
*どちらもなし
Person
クラスを作成します。print
出力するとインスタンスが出力されます。class Person:
def __init__(self, name, age):
self.name = name
self.age = age
tom = Person('Tom', 21)
print(tom)
<実行結果>
<__main__.Person instance at 0x109e74320>
*__str__
のみ
Person
クラスに__str__
を追加してprint
出力すると、__str__
で定義した文字列が出力されます。class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return 'name:{}, age:{}'.format(self.name, self.age)
tom = Person('Tom', 21)
print(tom)
<実行結果>
name:Tom, age:21
*__str__
と__repr__
Person
クラスに__str__
と__repr__
の両方を追加してprint
出力をすると、__str__
で定義した文字列が出力されます。class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return 'My name is {}, my old is {}'.format(self.name, self.age)
def __str__(self):
return 'name:{}, age:{}'.format(self.name, self.age)
tom = Person('Tom', 21)
print(tom)
<実行結果>
name:Tom, age:21
*__repr__
のみ
Person
クラスに__repr__
のみを定義してprint
出力すると、__repr__
で定義した文字列が出力されます。class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return 'My name is {}, my old is {}'.format(self.name, self.age)
tom = Person('Tom', 21)
print(tom)
<実行結果>
My name is Tom, my old is 21
*所感
業務で__str__
をよく見ることがあったのですが意味を理解していなかったので、今回調べて意味や使い方を学ぶことができてよかったです。今後は、細かいことでもよく調べて理解していくようにしていきたいと思います。