*__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__をよく見ることがあったのですが意味を理解していなかったので、今回調べて意味や使い方を学ぶことができてよかったです。今後は、細かいことでもよく調べて理解していくようにしていきたいと思います。
