extended `cached_property`