¿Cómo funciona el decorador @property en Python?

| | | | | | | | | | | |

Me gustaría entender cómo funciona la función integrada property. Lo que me confunde es que property también se puede usar como decorador, pero solo toma argumentos cuando se usa como una función integrada y no cuando se usa como decorador.

Esto el ejemplo es de la documentación:

clase C: def __init__(self): self._x = Ninguno def getx(self): return self._x def setx(self, valor): self._x = valor def delx(self): del self._x x = property(getx, setx, delx, "Soy la propiedad "x".) 

propiedad Los argumentos son getx, setx, delx y una cadena de documentos.

En el siguiente código, property se usa como decorador . El objeto de esto es la función x, pero en el código anterior no hay lugar para una función de objeto en los argumentos.

class C: def __init__(self ): self._x = Ninguno @property def x(self): """Soy la propiedad "x"."" return self._x @x.setter def x(self, value ): self._x = valor @x.deleter def x(self): del self._x 

Cómo son el x.setter y x .deleter decoradores creados en este caso?