Ce qui était surprenant dans les classes Python

Ce qui m'a surpris

Imaginez un code comme celui-ci:

sample.py


class Sample:

    sample_list = []

    def __init__(self, args1):
        self.name = args1

    def add_args(self, args2):
        self.sample_list.append(args2)

Lorsque j'exécute ce code, la liste_exemple est partagée entre a et b comme indiqué ci-dessous.

>>> a = Sample('a')
>>> b = Sample('b')
>>> a.add_args('hoge')
>>> b.add_args('huga')
>>> a.sample_list
['hoge', 'huga']

Solution

Vous pouvez éviter ce problème en concevant la classe avec des variables d'instance comme suit.

sample.py


class Sample:

    def __init__(self, args1):
        self.name = args1
        self.sample_list = []

    def add_args(self, args2):
        self.sample_list.append(args2)

Résultat d'exécution

>>> a = Sample('a')
>>> b = Sample('b')
>>> a.add_args('hoge')
>>> b.add_args('huga')
>>> a.sample_list
['hoge']
>>> b.sample_list
['huga']

référence

Documentation Class-Python 3.8.5

Recommended Posts

Ce qui était surprenant dans les classes Python
Python: une note sur les classes 1 "Résumé"
[Python] Qu'est-ce que @? (À propos des décorateurs)
[Python] À propos des classes Executor et Future
Ce que j'étais accro à Python autorun
Parler d'anciennes et de nouvelles classes en Python
À propos des tranches Python
À propos de la notation d'inclusion de python
À propos de Python tqdm.
À propos du rendement Python
À propos de python, classe
À propos de l'héritage Python
À propos de python, range ()
À propos de Python Decorator
Qu'est-ce que python
À propos de la référence Python
À propos des décorateurs Python
[Python] À propos du multi-processus
Qu'est-ce que Python
Ce à quoi je fais attention dans le codage Python: commentaires, annotations de type, classes de données, énumérations (enum)
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (1)
À propos des arguments de fonction (python)
[Python] Qu'est-ce que Pipeline ...
[Python] Mémo sur les fonctions
Les classes Python sont lentes
Résumé sur Python3 + OpenCV3
À propos de Python, pour ~ (plage)
[Python] Mémo sur les erreurs
À propos de l'environnement de développement Python
Python: à propos des arguments de fonction
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (3)
Python, à propos de la gestion des exceptions
Cours de base Python (13 cours)
À propos de Python Pyramid Traversal
À propos de Python3 ... (objet Ellipsis)
[Python] Chapitre 01-01 À propos de Python (First Python)
[Python] À propos de l'entrée standard
À propos de __all__ en python
[Python] Qu'est-ce que virtualenv
Ce à quoi j'étais accro lors de l'utilisation de Python tornado
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (2)
Éléments à prendre en compte lors de la mise en œuvre d'Airflow avec docker-compose
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (4)
Ce à quoi j'étais accro lorsque l'utilisateur de traitement est passé à Python
Ce qui m'inquiétait lors de l'affichage d'images avec matplotlib
[Python] En savoir plus sur pip
L'amour est né en Python 2
[Python] si __name__ == Qu'est-ce que «__ main__»:?
fonction de mémorandum python pour débutant
À propos de la fonction enumerate (python)
À propos de divers encodages de Python 3
Qu'en est-il de la négociation d'actions aujourd'hui?
Classe Python pour apprendre avec la chimioinfomatique
À propos de Python, len () et randint ()
À propos de Perl, Python, PHP, Ruby
À propos de la date et du fuseau horaire Python
Mémorandum sur la corrélation [Python]