__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()
от аргумента:
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)
person
yak
schedule
13.10.2011