[python] Différence entre variable et self. Variable dans la classe

instance.name

Lors de l'appel d'une variable de classe, appelez-la avec * instance * .name, Il existe deux types de callees.

name


class foo:
    name1 = 'test1'
    def __init__(self):
        self.name2 = 'test2'

bar = foo()
print(bar.name1)
# => test1
print(bar.name2)
# => test2

Les valeurs de ces deux peuvent être modifiées de la même manière.

bar.name1 = 'huga'
bar.name2 = 'hogehoge'
print(bar.name1)
# => huga
print(bar.name2)
# => hogehoeg

Cependant, le comportement change comme suit.

print(bar.__class__.name1)
# => test1
print(bar.__class__.name2)
# => AttributeError

Quelle est la cause de cela? En fait, il existe deux types de variables qu'une classe possède. L'une est une variable de classe ordinaire. L'autre est une variable dict qui existe en tant que membre de base de la classe.

name


class foo:
    name1 = 'test1'
    def __init__(self):
        self.name2 = 'test2'

bar = foo()
print(bar.__dict__)
# => {'name2':'test2'}
bar.name1 = 'hoge'
print(bar.__dict__)
# => {'name2':'test2','name1':'hoge'}

Les appels tels que * instance * .name affichent préférentiellement \ _ \ _dict \ _ \ _ [nom]. Appelez \ _ \ _ class \ _ \ _. Ne nommez que si \ _ \ _dict \ _ \ _ [nom] n'existe pas.

Si vous voulez utiliser une variable de classe comme valeur initiale ou comme valeur inchangée, vous devez l'écrire sans utiliser self. Comme nom1. De plus, si vous souhaitez toujours traiter avec la valeur spécifiée dans la classe, vous devez l'appeler self.class.name. Un autre avantage d'écrire comme name1 est qu'il peut être renvoyé à la valeur initiale.

name


class foo:
    name1 = 'test1'
    def __init__(self):
        self.name2 = 'test2'

bar = foo()
print(bar.name1)
# => test1
bar.name1 = 'newname'
print(bar.name1)
# => newname
del bar.name1
print(bar.name1)
# => test1

Vous ne pouvez déclarer self.name que si vous vous attendez à ce qu'il change ou si vous n'avez pas besoin de vous souvenir de la valeur avant le changement.

Recommended Posts

[python] Différence entre variable et self. Variable dans la classe
Différence entre list () et [] en Python
Différence entre == et est en python
Différence entre Ruby et Python en termes de variables
différence entre les instructions (instructions) et les expressions (expressions) en Python
Différence entre @classmethod et @staticmethod en Python
Différence entre append et + = dans la liste Python
Différence entre non local et global en Python
Ordre de référence des variables de classe et des variables d'instance dans "self. Variables de classe" en Python
[Python] Différence entre la méthode de classe et la méthode statique
À propos de la différence entre "==" et "is" en python
Variables de classe et d'instance Python
Différence entre return, return None et no return description en Python
Différence entre java et python (mémo)
Les mines terrestres cachées dans les variables de classe Python
Différence entre la série python2 et la série python3 dict.keys ()
[Python] Différence entre fonction et méthode
Python - Différence entre exec et eval
[Python] Différence entre randrange () et randint ()
[Python] Différence entre trié et trié (Colaboratoire)
Module Python num2words Différence de comportement entre l'anglais et le russe
Méthode de concaténation de liste en python, différence entre list.extend () et opérateur «+»
Différences entre Ruby et Python dans la portée
Différences entre la syntaxe Python et Java
Différences dans la relation entre PHP et Python enfin et quitter
[Python Iroha] Différence entre List et Tuple
[python] Différence entre la sortie rand et randn
Différences de multithreading entre Python et Jython
J'étais accro aux variables de classe et aux variables d'instance erronées en Python
Fonction pour ouvrir un fichier en Python3 (différence entre open et codecs.open et comparaison de vitesse)
classe de cas en python
Variables Python et types de données appris avec la chimio-automatique
J'ai écrit une classe en Python3 et Java
Problème avec les variables pseudo-privées Python et l'héritage de classe
Notation de classe en Python
Différences dans la façon d'écrire du code source externe entre Ruby et Python
[python] Calcul des mois et des années de différence de date / heure
Conversion mutuelle entre JSON et YAML / TOML en Python
Comparez la "relation log et infini" avec Gauche (0.9.4) et Python (3.5.1)
Exemple d'obtention du nom du module et du nom de la classe en Python
Différence entre "categorical_crossentropy" et "sparse_categorical_crossentropy"
Trouver des erreurs en Python
Différence entre régression et classification
Gérer les variables d'environnement en Python
Pile et file d'attente en Python
Variables Python et ID d'objet
Différence entre np.array et np.arange
Différence entre MicroPython et CPython
Unittest et CI en Python
Différence entre ps a et ps -a
Différence entre return et print-Python
[Python] Explique la différence entre strftime et strptime dans le module datetime avec un exemple
Installez OpenCV 3 (core + contrib) dans l'environnement Windows et Python 3 et différence entre OpenCV 2 et OpenCV 3 et contrôle de fonctionnement facile
Comprendre la différence entre l'affectation cumulative aux variables et l'affectation cumulative aux objets
[Python] Comment jouer avec les variables de classe avec décorateur et métaclasse
Afficher les nombres et les caractères affectés aux variables dans l'impression python
J'ai créé une classe en Python et essayé de taper du canard
Obtenez la date et l'heure actuelles en Python, en tenant compte du décalage horaire