Каков правильный шаблон в Python для реализации ленивых геттеров?

Иногда мне нравится писать атрибуты-получатели для объекта так, чтобы при первом их вызове тяжелая работа выполнялась один раз, а это значение сохранялось и возвращалось при будущих вызовах. В 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
6
задан D.C. 12 March 2012 в 05:31
поделиться