Properties work using a descriptor protocol that only works with attributes of a class object. The property object must be stored in the class attribute. You cannot "override" it for each instance.
You can, of course, provide a class property that receives an instance attribute or reverts to some by default:
class C(object): _default_x = 5 _x = None @property def x(self): return self._x or self._default_x def alpha(self, beta): self._x = beta
source share