1234567891011121314151617181920212223242526272829303132333435 |
- from typing import Any, Callable, TYPE_CHECKING
- if TYPE_CHECKING:
- standard_cached_property = None
- else:
- try:
- from functools import cached_property as standard_cached_property
- except ImportError: # Python < 3.8
- standard_cached_property = None
- if standard_cached_property:
- cached_property = standard_cached_property
- else:
- # Code taken from https://github.com/bottlepy/bottle
- class CachedProperty:
- """A cached property.
- A property that is only computed once per instance and then replaces itself with
- an ordinary attribute. Deleting the attribute resets the property.
- """
- def __init__(self, func: Callable) -> None:
- self.__doc__ = getattr(func, "__doc__")
- self.func = func
- def __get__(self, obj: object, cls: type) -> Any:
- if obj is None:
- return self
- value = obj.__dict__[self.func.__name__] = self.func(obj)
- return value
- cached_property = CachedProperty
- __all__ = ["cached_property"]
|