Форум сайта python.su
Очень хотелось бы получить возможность ленивой инициализации для любого атрибута класса.
Подскажите, пожалуйста, простое и эффективное решение.
Отредактировано (Март 29, 2011 18:59:35)
Офлайн
class A():
def __init__(self):
self.foo
…
A1=A()
A1.foo='init'
Офлайн
На этот код мой Python 2.6 выдает ошибку при попытке создания экземпляра класса: AttributeError: A instance has no attribute ‘foo’.
Я имел в виду ленивую инициализацию в духе Smalltalk:
value
^value ifNil: [value := self valueCalculation]
Отредактировано (Март 30, 2011 16:44:09)
Офлайн
http://www.toofishes.net/blog/python-cached-property-decorator/ - тут реализован декоратор, который все делает
Отредактировано (Март 30, 2011 12:19:30)
Офлайн
что-нибудь типа такого:
class LazyInit(object):
def __init__(self):
self._foo = None
@property
def foo(self):
if not self._foo:
self._foo = "init"
return self._foo
Офлайн
truporez, суть верна, но как-то лень везде таскать такую ленивую инициализацию:)
regall, спасибо за дельный декоратор - то что доктор прописал!
Отредактировано (Март 30, 2011 16:54:42)
Офлайн