add memoized_property decorator