У меня есть немного другая версия вашего кода, которая может помочь.
class A(object):
def __getattr__(self, attr):
try:
return self.__dict__[attr]
except KeyError:
self.__dict__[attr] = 'Attribute set to string'
print 'Assigned attribute', attr
return self.__dict__[attr]
>>> o = A()
>>> o.foo
Assigned attribute foo
'Attribute set to string'
Я не знаю, как вы видите «Назначенный атрибут» более одного раза. Это с Python 2.6.6.
Стоит отметить, что try
всегда терпит неудачу, если вызывается __getattr__
.