Просто измените его, чтобы не использовать self.__dict__
. Вы должны обращаться к name
и count
как к свойствам, а не пытаться обращаться к ним по именам, с которыми связаны их свойства:
class Foo(object):
def __init__(self, name):
self._name = name
self._count = 0
def getName(self):
return self._name
name = property(getName)
def getCount(self):
c = self._count
self._count += 1
return c
count = property(getCount)
def __repr__(self):
return "Foo %s count=%d" % (self.name, self.count)
Затем используется:
>>> f = Foo("name")
>>> repr(f)
'Foo name count=0'
>>> repr(f)
'Foo name count=1'
>>> repr(f)
'Foo name count=2'
РЕДАКТИРОВАТЬ : Вы по-прежнему можете использовать именованное форматирование, но вы должны изменить свой подход, поскольку вы не можете получить доступ к свойствам через нужные имена:
def __repr__(self):
return "Foo %(name)s count=%(count)d" % {'name': self.name, 'count': self.count}
Это может быть лучше, если вы повторяете что-то и / или имеете много вещей, но это немного глупо.