Unabhängig davon, wie oft ich die Instanz neu erstellt habe, hat sich die Variable, die ich mit init () erstellen wollte, nicht geändert, und ich war monatelang süchtig danach.
Ich habe es falsch verstanden, seit ich angefangen habe, Python zu schreiben
class H:
val = 1 <-------das ist
def __init__(self):
self.val = 1 <-------Ich dachte, es wäre dasselbe
Es war wirklich so
class H:
val = 1 <-------Klassenvariable
def __init__(self):
self.val = 1 <-------Instanzvariable
test code
import datetime, time
#Klassenvariable
class A:
t = datetime.datetime.today() #<-----------------#Klassenvariable: Egal wie viele Instanzen Sie erstellen, es ändert sich nicht! !!
class B:
def __new__(cls): # <----------------# __new__Instanzvariable
self = object.__new__(cls)
# print('__new__ :', str(id(self)))
self.t = datetime.datetime.today()
return self
class C:
def __init__(self): # <----------------# __init__Instanzvariable
self.t = datetime.datetime.today()
class D:
def __call__(self): # <----------------# __call__Die Instanzvariable ist der Klassenname()Angerufen von. Instanz Instanz.__call__()Das Gefühl, Arbeit zu sparen.
return datetime.datetime.today()
def start():
print("-start")
print(datetime.datetime.today())
print("-A")
instance = A()
print(A.t) #Nur die Klassenvariable kann direkt von der Klasse aufgerufen werden, keine Instanz
print(instance.t) #Holen Sie sich von der Instanz<-----------Gemeinsamer Wert für verschiedene Instanzen (festgelegt durch die Nummer beim ersten Aufruf der Klasse)
print("-B")
instance = B()
print(instance.t)
print("-C")
instance = C()
print(instance.t)
print("-D")
instance = D()
print(instance()) # <---------------- __call__Ist der Klassenname()Angerufen von. Instanz Instanz.__call__()Das Gefühl, Arbeit zu sparen.
##############################################################
if __name__ == "__main__":
start()
print("=========================================")
time.sleep(1)
start()
result
Ich erstelle eine Instanz neu
-start
2020-01-30 14:29:24.227419
-A
2020-01-30 14:29:24.227217 <-----------Hier
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 <-----------Hier ist der gleiche 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
Andere sind anders. Die Klassenvariable war so etwas ...
** Hinweise zur Verwendung von Klassenvariablen ** Wenn Sie auf Klassenvariablen zugreifen, sollten Sie vermeiden, auf sie wie "instance.class-Variablen" oder "self.class-Variablen" zuzugreifen, es sei denn, Sie haben einen bestimmten Grund dafür. In Python können Instanzvariablen aus Instanzobjekten erstellt werden, wodurch Klassenvariablen mit Instanzvariablen unbeabsichtigt ausgeblendet werden können. https://uxmilk.jp/41600
Wir geben an verschiedenen Orten unser Bestes. Heul ~. Es war eine Katastrophe ...
Lassen Sie uns Python in der Atmosphäre stoppen
Recommended Posts