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