Skip to content

Instantly share code, notes, and snippets.

@zelaznik
Created November 10, 2021 20:28
Show Gist options
  • Save zelaznik/606d69d6317b63ce6f1f2d564ba3ee5f to your computer and use it in GitHub Desktop.
Save zelaznik/606d69d6317b63ce6f1f2d564ba3ee5f to your computer and use it in GitHub Desktop.
class memoized_property:
def __init__(self, method):
self.__method = method
prefix = method.__qualname__.rsplit(".")[0].replace(".", "__")
self.__name = '_%s__%s' % (prefix, method.__name__)
def __get__(self, obj, objtype=None):
if obj is None:
return self
try:
value = getattr(obj, self.__name)
except AttributeError:
value = self.__method(obj)
setattr(obj, self.__name, value)
return value
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment