Maybe better like this:

    d.foo    # calculates result, stores it in d._cached_properties['foo'], and returns result.
    d.foo    # returns d._cached_properties['foo']