Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class lazy(object):
- """
- Normal approach::
- >>> class Test(object):
- ... @property
- ... def attr(self):
- ... print "attr property"
- ... if not hasattr(self, '_attr'):
- ... print "expensive load"
- ... self._attr = 42
- ... return self._attr
- >>> t = Test()
- >>> t.attr
- attr property
- expensive load
- 42
- >>> t.attr
- attr property
- 42
- >>> vars(t)
- {'_attr': 42}
- @lazy approach:
- >>> class Test(object):
- @lazy
- def attr(self):
- print "expensive load"
- return 42
- >>> t = Test()
- >>> vars(t)
- {}
- >>> t.attr
- expensive load
- 42
- >>> vars(t)
- {'attr': 42}
- >>> t.attr
- 42
- """
- __slots__ = ['setup']
- def __init__(self, setup):
- self.setup = setup
- def __get__(self, obj, type):
- if obj is None:
- return self
- s = self.setup(obj)
- setattr(obj, self.setup.__name__, s)
- return s
Advertisement
Add Comment
Please, Sign In to add comment