# ClsProperty

# ClassProperty

class ClsProperty:
    def __init__(self, f):
        self.f = f
        pass

    def __get__(self, instance, owner):
        assert instance is None and owner is not None
        func_name = self.f.__name__
        clsp_name = f"clsp_{func_name}"
        if clsp_name not in owner.__dict__:
            setattr(owner, clsp_name, self.f(owner))
        return getattr(owner, clsp_name)