Le comportement de @property est différent entre la définition de classe et les styles anciens et nouveaux

Une note sur propriété

Dans le 2ème système [^ 1].

[^ 1]: Dans la 3ème série, il est jugé inconditionnellement comme un nouveau style, donc aucun problème ne se produit même si vous écrivez l'ancien style.

J'écris quelque chose qui n'est pas une fonctionnalité à l'ancienne dans l'ancien, donc c'est 100% convivial.

foo.py


class New(object):
    def __init__(self):
        self._x = 10

    @property
    def x(self):
        return self._x * 2

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

class Old():
    def __init__(self):
        self._x = 10

    @property
    def x(self):
        return self._x * 2

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

if __name__ == '__main__':
    n = New()
    n.x = 10
    print ( n.x )

    o = Old()
    o.x = 10
    print ( o.x )

«New» et «Old» sont exactement les mêmes, sauf pour la ligne de la déclaration de «class».

python


$ python foo.py
20
10

J'ai recherché diverses choses [^ 2], mais ↓ est la plus intuitive

[^ 2]: Existe-t-il une version Python de Data :: Dumper ou y a-t-il un B :: Deparse?

Changer après le principal


if __name__ == '__main__':
    n = New()
    print (vars(n))
    n.x = 2
    print (vars(n))

    o = Old()
    print (vars(o))
    o.x = 2
    print (vars(o))

python


$ python foo.py
{'_x': 10}
{'_x': 2}
{'_x': 10}
{'x': 2, '_x': 10}

En bref, vieux

class Old():
    def __init__(self):
        self._x = 10

if __name__ == '__main__':
    o = Old()
    print (vars(o))
    o.x = 2
    print (vars(o))

Même chose que courir.

Recommended Posts

Le comportement de @property est différent entre la définition de classe et les styles anciens et nouveaux
La réponse de "1/2" est différente entre python2 et 3
Le comportement de retrait de json.dumps est différent entre python2 et python3
Le moment auquel la valeur de l'argument par défaut est évaluée diffère entre Ruby et Python.
J'ai étudié le comportement de la différence entre lien dur et lien symbolique
Quelle est la différence entre «pip» et «conda»?
À propos du comportement de copy, deepcopy et numpy.copy
Résumé des différences entre PHP et Python
À propos de la différence entre "==" et "is" en python
Quelle est la différence entre Unix et Linux?
Prise en compte de la différence entre la courbe ROC et la courbe PR
Connaissez l'emplacement du fichier de définition de classe Python.
Quelle est la différence entre usleep, nanosleep et clock_nanosleep?
Visualisation de la connexion entre le malware et le serveur de rappel
Pourquoi le premier argument de la classe [Python] est-il self?
pca.components_ de sklearn est le coefficient de corrélation entre le composant principal et le montant de la fonction et est appelé le montant de chargement de facteur.
Quelle est la différence entre les liens symboliques et les liens durs?
Un résumé approximatif des différences entre Windows et Linux
La loterie est-elle rentable? ~ LOTO7 et la loi des grands nombres ~