Como o decorador @property funciona em Python?

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

Gostaria de entender como funciona a função interna propriedade. O que me confunde é que propriedade também pode ser usado como decorador, mas só aceita argumentos quando usado como função interna e não quando usado como decorador.

Isso exemplo é da documentação:

classe C: def __init__(self): self._x = Nenhum def getx(self): return self._x def setx(self, value): self._x = valor def delx(self): del self._x x = property(getx, setx, delx, "Eu sou a propriedade "x".) 
Os argumentos de

propriedade" são getx, setx, delx e uma string doc.

No código abaixo property é usado como um decorador . O objeto dela é a função x, mas no código acima não há lugar para uma função de objeto nos argumentos.

class C: def __init__(self ): self._x = Nenhum @property def x(self): """Eu sou a propriedade "x".""" return self._x @x.setter def x(self, value ): self._x = value @x.deleter def x(self): del self._x 

Como estão os x.setter e x .deleter decoradores criados neste caso?