は__repr__
、オブジェクトを説明する文字列を返す必要があります。可能であれば、等しいオブジェクトに評価される有効なPython式である必要があります。int
これは、またはのような組み込みタイプに当てはまりますstr
。
>>> x = 'foo'
>>> eval(repr(x)) == x
True
それが不可能な場合は'<...>'
、オブジェクトを一意に説明する文字列にする必要があります。デフォルト__repr__
はこの例です:
>>> class Foo(object):
pass
>>>
>>> repr(Foo())
'<__main__.Foo object at 0x02A74E50>'
メモリ内のオブジェクトのアドレスを使用して、オブジェクトを一意に識別します。もちろん、アドレスはオブジェクトについてあまり教えてくれないので__repr__
、オブジェクトの状態を説明する文字列をオーバーライドして返すと便利です。
オブジェクトの状態は、オブジェクトに含まれる他のオブジェクトによって定義されるため、オブジェクトを自分のオブジェクトに含めるのは理にかなっていますrepr
。これはまさに何をするlist
かdict
です:
>>> repr(['bar', Foo()])
"['bar', <__main__.Foo object at 0x02A74710>]"
あなたの場合、状態はあなたのColumn
プロパティにあるので、あなたはそれらを使用したいと思いますrepr
。%r
これにはフォーマットを使用できますrepr()
。引数のaが挿入されます。
def __repr__(self):
return '<Stats: description=%r, mystat=%r>' % (self.description, self.mystat)
新しいフォーマットを使用した場合と同等です。
def __repr__(self):
return '<Stats: description={0.description!r}, mystat={0.mystat!r}>'.format(self)