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.
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 ...
** 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 ...
Arrêtons python dans l'atmosphère
Recommended Posts