That is why I don't like the use of @property. Even though the decorator is a nice short-hand notation, it is more confusing in my oppinion. So someone is more likely still call the property as a function when looking at:
class C: @property def data(self): return 42 rather than if they saw: class C: def _data(self): return 42 data=property(_data) I personally I find the second case more readable, even though it is longer. -Nick Fredrik Lundh wrote: > Nick Maclaren wrote: > > > |> a property looks like an attribute, not a method, so you're trying to > > call whatever > > |> your "joe()" method returns. > > > > Well, yes, that was pretty obvious - but what was NOT obvious is why it > > should do that for one of two identical methods. > > identical? you only applied @property to one of the methods, and then you're > surprised that only one of the methods were turned into a property? > > > |> (that's what "a function for getting an attribute value" in the property > > documentation > > |> refers to). > > > > Well, as joe is an attribute of the class fred, and the decorator is applied > > to the declaration of joe within fred, I assumed that it referred to getting > > joe from fred. That certainly doesn't appear to be the case > > @property turns your "joe" method into a getter method for the (virtual) > attribute > "joe". when you access the attribute, the getter method will be called. > whatever > that method returns will be the attribute's value. that's what the > documentation > says, and that's what your code is doing. > > </F> -- http://mail.python.org/mailman/listinfo/python-list