Decorators for caching instance methods.
Project description
cachegrab
cachegrab
is a Python package that provides decorators for caching instance methods.
Installation
pip install cachegrab
Main Features
Property Caching
deep_cached_property
➔ Inspired by functools.cached_property, this decorator provides a deep copy of cached return values, ensuring they remain immutable after their initial access. The original return values are preserved in a dictionary namedself._deep_cache
.
Attribute Caching
cached_attribute
➔ Decorator that returns an instance attribute with the same name as the decorated function, prefixed with an underscore.lazy_attribute
➔ Identical tocached_attribute
, except cached values are stored in a dictionary namedself._lazy_cache
.
Example Usage
Imports
from cachegrab import deep_cached_property, cached_attribute
from functools import cached_property
Decorate Instance Methods
Consider the example class Dog
below:
toys
➔ decorated withcached_property
because toys can be buried and are therefore mutable.is_good_boy
➔ decorated withdeep_cached_property
because his good boy status is never in question.tricks
➔ decorated withcached_attribute
to prevent direct overwrites.
class Dog(object):
@cached_property
def toys(self):
return {'ball','bone'}
@deep_cached_property
def is_good_boy(self):
return True
@cached_attribute
def tricks(self):
return {'sit','shake'}
def bury_toys(self):
while self.toys:
self.toys.pop()
We will attempt to modify both cached properties:
dog = Dog()
dog.bury_toys()
dog.good_boy = False
Let's look at the results:
print('dog toys ➜', ', '.join(dog.toys) if dog.toys else '?')
print('good boy? ➜', dog.is_good_boy)
print('_deep_cache ➜', dog._deep_cache)
dog.tricks # access tricks property
print('_tricks ➜', dog._tricks)
dog toys ➜ ? good boy? ➜ True _deep_cache ➜ {'is_good_boy': True} _tricks ➜ {'sit','shake'}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
cachegrab-0.2.0.tar.gz
(3.6 kB
view hashes)
Built Distribution
Close
Hashes for cachegrab-0.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d6fa79b719af8d3ad75fbca889eff061cefaa7ea9e99bf7405977584d1ce7151 |
|
MD5 | 3fcfd7a454e495e623505fea8db1f17e |
|
BLAKE2b-256 | 7fa5a26fa8c11fc99d07cc0615e7fb8fdcc88d2024705a6fbbd33d9b53e7691c |