Czasami lubię pisać atrybuty gettera dla obiektu, tak, że po raz pierwszy są wywoływane, podnoszenie ciężkich zadań odbywa się raz, a wartość ta jest zapisywana i zwracana przy przyszłych połączeniach. W celu c użyję zmiennej ivar lub statycznej, aby utrzymać tę wartość. Coś takiego:Jaki jest właściwy wzorzec w Pythonie do implementacji leniwych pobierających?
- (id)foo
{
if (_foo == nil)
{
_foo = // hard work to figure out foo
}
return _foo
}
Czy ten sam wzór dobrze pasuje w Pythonie, czy też jest bardziej akceptowany sposób robienia tego? Zasadniczo mam to samo. Co mi się nie podoba w moim rozwiązania jest to, że mój przedmiot dostaje bałagan z wartościami i pobierające za tymi wartościami:
def foo(self):
if not hasattr(self, "mFoo":
self.mFoo = # heavy lifting to compute foo
return self.mFoo
dzięki, @property nie pasuje do tej klasy, ale robi to? –
@darren w rzeczy samej nie, to właśnie dostaję za wysłanie po złej stronie północy. :) Naprawiłem to teraz. – lvc