Je suis mort en pensant qu'une variable de classe Python était une variable d'instance

Peu importe le nombre de fois où j'ai recréé l'instance, la variable que j'avais l'intention de créer avec __init__ () n'a pas changé, et j'y ai été accro pendant des mois.

Conclusion

Je me suis mal compris depuis que j'ai commencé à écrire python

class H:
  val = 1        <-------c'est
  
  def __init__(self):
    self.val = 1        <-------Je pensais que c'était la même chose

C'était vraiment comme ça

class H:
  val = 1        <-------Variable de classe
  
  def __init__(self):
    self.val = 1        <-------Variable d'instance

test code

import datetime, time

#Variable de classe
class A:
    t = datetime.datetime.today()          #<-----------------#Variable de classe: peu importe le nombre d'instances que vous créez, cela ne change pas! !!

class B:
    def __new__(cls):                      # <----------------# __new__Variable d'instance
        self = object.__new__(cls)
        # print('__new__ :', str(id(self)))
        self.t = datetime.datetime.today()
        return self

class C:
    def __init__(self):                 # <----------------# __init__Variable d'instance
        self.t = datetime.datetime.today()

class D:
    def __call__(self):                 # <----------------# __call__La variable d'instance est le nom de la classe()Appelé par. instance d'instance.__call__()Sentiment d'économiser du travail.
        return datetime.datetime.today()

def start():
    print("-start")
    print(datetime.datetime.today())

    print("-A")
    instance = A()
    print(A.t)           #Seule la variable de classe peut être appelée directement depuis la classe, pas une instance
    print(instance.t)    #Obtenir de l'instance<-----------Valeur commune pour différentes instances (fixée par le nombre lorsque la classe a été appelée pour la première fois)

    print("-B")
    instance = B()
    print(instance.t)

    print("-C")
    instance = C()
    print(instance.t)

    print("-D")
    instance = D()
    print(instance())    # <---------------- __call__Est le nom de la classe()Appelé par. instance d'instance.__call__()Sentiment d'économiser du travail.

##############################################################
if __name__ == "__main__":

    start()
    print("=========================================")
    time.sleep(1)
    start()

result

Je recrée une instance

-start
2020-01-30 14:29:24.227419
-A
2020-01-30 14:29:24.227217             <-----------ici
2020-01-30 14:29:24.227217
-B
2020-01-30 14:29:24.227470
-C
2020-01-30 14:29:24.227494
-D
2020-01-30 14:29:24.227516
=========================================
-start
2020-01-30 14:29:25.230648
-A
2020-01-30 14:29:24.227217           <-----------Voici le même orz
2020-01-30 14:29:24.227217
-B
2020-01-30 14:29:25.230766
-C
2020-01-30 14:29:25.230833
-D
2020-01-30 14:29:25.230877

D'autres sont différents. La variable de classe était une telle chose ...

Le style pour progresser avec toute la puissance

** Remarques sur l'utilisation des variables de classe ** Lorsque vous accédez aux variables de classe, vous devez éviter d'y accéder comme "variables instance.class" ou "variables self.class" à moins que vous n'ayez une raison spécifique de le faire. En Python, les variables d'instance peuvent être créées à partir d'objets d'instance, qui peuvent involontairement masquer des variables de classe avec des variables d'instance. https://uxmilk.jp/41600

Nous faisons de notre mieux à divers endroits. Hurlement ~. C'était le bordel ...

Résumé

Arrêtons python dans l'atmosphère

Recommended Posts

Je suis mort en pensant qu'une variable de classe Python était une variable d'instance
J'ai écrit une classe en Python3 et Java
Python: variables de classe et d'instance
Variables de classe et d'instance Python
Python: j'ai essayé menteur et honnête
Définitions de classe Python et gestion des instances
[Python] classe, instance
classe python, instance
Python: préparez un sérialiseur pour l'instance de classe:
python memo- "sinon A et B" était "si (pas A) et B"
À propos de la classe et de l'instance
Je souhaite intégrer une variable dans une chaîne Python
J'ai essayé de faire LINE BOT avec Python et Heroku
Ne prenez pas une instance d'une classe d'exception Python directement comme argument de la classe d'exception!
Une histoire qui a cessé de fonctionner sur mglearn.plots.plot_nmf_faces et qui se demandait s'il s'agissait d'une erreur?
Comment créer une instance d'une classe particulière à partir de dict en utilisant __new__ () en python
J'ai été surpris de recevoir une belle critique lorsque j'ai écrit Python à CheckIO et son explication
J'ai pensé à un cours pour débutants sur Python basé sur des jeux blockchain
J'ai eu une erreur dans vim ou zsh dans la série Python 3.7
Considérez si la programmation était un anime en Python et C
Ordre de référence des variables de classe et des variables d'instance dans "self. Variables de classe" en Python
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
Qu'est-ce qu'une variable d'instance?
J'ai fait un texte Python
Une histoire sur l'écriture d'AWS Lambda et de devenir un peu accro aux valeurs par défaut des arguments Python
Je veux clarifier la question de la méthode "__init__" et de l'argument "self" de la classe Python.
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
[Road to Intermediate Python] Appelez une instance de classe comme une fonction avec __call__
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'avais du mal à faire mes devoirs, j'ai donc utilisé Python pour la comptabilité de gestion.
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
[python] J'ai créé une classe qui peut écrire rapidement une arborescence de fichiers
Python a + = b et a = a + b sont différents
J'ai fait un Line-bot avec Python!
J'ai fait une loterie avec Python.
J'ai envoyé un SMS avec Python
J'ai créé une application pour les étrangers visitant le Japon à Hackason et j'ai gagné un prix, mais quand j'y réfléchissais attentivement, c'était inutile
J'ai joué avec PyQt5 et Python3
objet perl et classe python partie 1.
[Python] renvoie A [ou / et] B
[Python] Hériter d'une classe avec des variables de classe
J'ai créé un démon avec Python
Classes et instances Python, méthodes d'instance
À propos du démarrage d'une instance avec un volume EBS crypté (où j'étais accro)
J'étais accro à la création d'un environnement Python venv avec VS Code
Conseils: [Python] Restaurer et extraire au hasard un tableau à partir d'un fichier fasta
[Python] Créez un linebot pour écrire le nom et l'âge sur l'image
J'ai défini des variables d'environnement dans Docker et je les ai affichées en Python.
Un programme python qui redimensionne une vidéo et la transforme en image
Hit une méthode d'une instance de classe avec l'API Web Python Bottle
Le nom du fichier était mauvais en Python et j'étais accro à l'importation
Je veux colorer une partie de la chaîne Excel avec Python
[Python] J'ai été accro pendant une heure à essayer d'utiliser la notation d'inclusion de liste
[Python] Il était très pratique d'utiliser la classe Python pour le programme ROS.
Je souhaite créer une application Web en utilisant React et Python flask