Иногда мне нравится писать атрибуты-получатели для объекта так, чтобы при первом их вызове тяжелая работа выполнялась один раз, а это значение сохранялось и возвращалось при будущих вызовах. В target-c я бы использовал ivar или статическую переменную для хранения этого значения. Что-то вроде:
- (id)foo
{
if ( _foo == nil )
{
_foo = // hard work to figure out foo
}
return _foo
}
Этот же шаблон хорошо работает в Python, или есть более приемлемый способ сделать это? У меня пока в принципе тоже самое. Что мне не нравится в моем решении, так это то, что мой объект загроможден значениями и геттерами для этих значений:
def foo(self):
if not hasattr(self, "mFoo":
self.mFoo = # heavy lifting to compute foo
return self.mFoo