They're 3 different property objects; the 3rd is just reusing the memory allocated for the first, since the first has been collected. When you use
@name.getter
or
@name.setter
the decorator returns a new property object reflecting the getter or setter you defined, which is then bound to the name of the function you're defining. Since the name of the function you're defining is name
, it replaces the old name
property.