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> |
のように出力される。
デバッグのしやすさから考えると、どちらも実装しておいた方が良い。
同じタグの記事
- BOM付きUTF-8からBOMを除去するpython
- jythonのヒープメモリ設定
- Kotlin1.2.50がリリースされていた
- macOSをHigh Sierraに更新した。スクリプト実行環境のバージョンは変わったのか
- macOSをMojaveに更新した。スクリプト実行環境のバージョンは変わったか
- pathlib.Pathを調べる
- pyenvでpython環境をインストール
- pyenvとvirtualenvでpython環境を構築
- python unpack
- python3で数値のlistを文字列のlistに変換
同じカテゴリの記事