Comment les @property décorateur de travail?

J'aimerais comprendre comment la fonction intégrée property œuvres. Ce qui me confond, c'est que property peut également être utilisé comme un décorateur, mais il suffit d'arguments lorsqu'il est utilisé comme une fonction intégrée et non pas lorsqu'il est utilisé comme un décorateur.

Cet exemple est à partir de la la documentation:

class C(object):
    def __init__(self):
        self._x = None

    def getx(self):
        return self._x
    def setx(self, value):
        self._x = value
    def delx(self):
        del self._x
    x = property(getx, setx, delx, "I'm the 'x' property.")

propertyarguments sont getx, setx, delx et un doc chaîne.

Dans le code ci-dessous property est utilisé en tant que décorateur. L'objet, c'est la x fonction, mais dans le code ci-dessus il n'y a pas de place pour une fonction de l'objet dans les arguments.

class C(object):
    def __init__(self):
        self._x = None

    @property
    def x(self):
        """I'm the 'x' property."""
        return self._x

    @x.setter
    def x(self, value):
        self._x = value

    @x.deleter
    def x(self):
        del self._x

Et, comment sont les x.setter et x.deleter décorateurs créé?
Je suis confus.

  • Voir aussi: Comment puis-Python propriétés travail?
  • property est en fait une classe (pas de fonction), bien qu'il ne fait sans doute appel à la __init__() méthode lorsque vous effectuez un objet, bien sûr. À l'aide de help(property) depuis le terminal est perspicace. help est également une classe pour une raison quelconque.
  • Je pense que ce lien est un bon exemple: [propriété] (journaldev.com/14893/python-property-decorator)
  • 2-année-vieux fils, mais encore: Tout est une classe. Même des classes.
  • Cela a été déroutant pour moi aussi. J'ai enfin trouvé un article qui a été en mesure de briser pour moi. J'espère que cela aide quelqu'un d'autre. programiz.com/python-programming/property je ne suis pas affilié en aucune façon avec le site.
InformationsquelleAutor ashim | 2013-06-26