What's the purpose of _user_cache? Would using cached_property clean up this code?