I have written some code that uses attributes of an object:
class Foo:
def __init__(self):
self.bar = \"baz\"
myFoo = Foo()
print (myFoo.bar)
I would go for the refactoring, but only for a matter of style - it seems clearer to me that "fancy calculations" might be ongoing with a method call, while I would expect a property to be almost a no-op, but this is a matter of taste.
Don't worry about the decorator's performance... if you think that it might be a problem, measure the performance in both cases and see how much it does add (my guess is that it will be totally negligible if compared to your fancy calculations).