__repr__
应该返回一个描述对象的字符串。如果可能,它应该是一个有效的 Python 表达式,计算结果为相等的对象。int
这对于像or这样的内置类型是正确的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()
参数:
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)