インスタンスを表す文字列を分かりやすくする

Mar 4, 2017   #python 

ログとかにインスタンスの内容をダンプしたりするとき、つい適当にprintとかlogger.debugしても、 標準では、インスタンスの内容をスマートに分かりやすく表示してくれたりはしないようです。

そのため、デバッグをしやすくするためにも、以下のような感じで__repr__をオーバーライドしておくと、 分かりやすくなって便利だったりします。

reprを定義しない場合

class MyClass(object):
  def __init__(self):
    self.attr1 = 123
    self.attr2 = 456

mc = MyClass()
print(mc)  # => <__main__.MyClass object at 0xXXXXXXXXXX>

reprを定義する場合

class MyClass(object):
  def __init__(self):
    self.attr1 = 123
    self.attr2 = 456

  def __repr__(self):
    return ", ".join("%s: %s" % item for item in vars(self).items())

mc = MyClass()
print(mc)  # => attr2: 456, attr1: 123

ちょっとしたTipsでした。