from typing import Callable
import functools


def cached_property(func: Callable) -> property:
    """Customized cached property decorator

    Args:
        func: Member function to be decorated

    Returns:
        Decorated cached property
    """
    return property(functools.lru_cache(None)(func))