In diesem Artikel werde ich darüber schreiben, was eine "Klassenmethode" ist. Artikel bis zum letzten Mal ↓ ↓ ↓ Dies und das von Python-Eigenschaften
Kurz gesagt, es handelt sich um eine "Methode, die wie eine Klassenvariable direkt von einer Klasse aus verwendet werden kann". (Eine Methode ist eine Funktion in einer Klasse)
@classmethod
def Methodenname(cls,Argument 1,Argument 2, ...):
Dies ist die Form einer Klassenmethode. Es gibt einige Unterschiede zu den Funktionen, die wir bisher gesehen haben, daher ist es leicht zu erkennen. (1) Da die Instanz (Entität) nicht existiert, wird das 'Selbst', das sich selbst darstellt, nicht vorbereitet. (2) Ein Argument namens "cls" wird anstelle von "selbst" vorbereitet, und das Objekt der Klasse, in der die Klassenmethode gespeichert ist, wird zugewiesen.
Wenn Sie eine Klassenmethode aufrufen, können Sie sie direkt von der Klasse aus aufrufen.
#Aufrufen einer Klassenmethode
Name der Klasse.Name der Klassenmethode()
#Für normale Methoden
hello =Name der Klasse#Instanzerstellung
hello.Methodenname#Methodenaufruf
Seien Sie vorsichtig, wenn Sie es verwenden, da auch der aufrufende Teil anders ist.
Ich habe die Klassenmethode früher als "eine Methode erwähnt, die wie eine Klassenvariable direkt aus der Klasse verwendet werden kann". Aber wenn Sie überhaupt nicht wissen, was die Klassenvariablen sind, finde ich das erfrischend. Die Klassenvariable ist der "Nachricht" -Teil des folgenden Codes.
class Lesson:
message = 'OK'
def print(self):
print(Lesson.message)
le = Lesson() #Instanzerstellung
le.print() #Aufruf der Druckmethode
Lesson.message = 'Welcome!' #'message'Der Inhalt der Variablen'Welcome!'ändern
le.print() #nochmal'Druckmethode'Anruf
print(Lesson.message) #Rufen Sie auch die Klassenvariable messsage auf
Ich denke nicht, dass es so schwierig ist, weil es wie eine normale Variable ist.
Wie Sie ganz am Ende sehen können, können Sie es direkt aus der Klasse aufrufen, ohne eine Instanz zu erstellen. Dies liegt daran, dass die Werte im Gegensatz zu Methoden (mit def) in der Klasse selbst und nicht in der Instanz gespeichert werden.
Eine Klassenmethode ist eine Kombination aus Klassenvariablen und Methoden. Es kann direkt aus der Klasse aufgerufen und leicht geändert werden.
class MyObj:
message = 'OK'
@classmethod
def print(cls):
print(cls.message)
MyObj.print() #OK
MyObj.message = 'Welcome!'
MyObj.print() #Welcome!
print(MyObj.message) #Welcome!
#Für normale Methoden
#mo = MyObj()
#mo.print()
Sie können sehen, dass Sie es direkt aus der Klasse aufrufen können, ohne eine Instanz zu erstellen. Sie können sehen, dass es sich von der normalen Methode unterscheidet, da Sie den Wert leicht ändern können.
Bereiten wir nun eine normale Methode und eine Klassenmethode vor und überprüfen, wie sie sich beim Erstellen einer Instanz verhalten.
class A():
count = 0
def __init__(self):
A.count += 1 #Jedes Mal, wenn eine Instanz erstellt wird'count'Hinzugefügt
def exclaim(self):
print('I am an A!')
@classmethod
def kids(cls):
print('A has', cls.count, 'title objects.') #Zeigen Sie, wie oft es gezählt wurde
a = A() #Erstellen Sie eine Instanz
b = A() #Erstellen Sie eine Instanz
c = A() #Erstellen Sie eine Instanz
A.kids() #Aufrufen einer Klassenmethode'A has 3 title objects.'
Dies ist eine Anzahl, die jedes Mal hinzugefügt wird, wenn eine Instanz erstellt wird.
Nach dreimaligem Erstellen einer Instanz mit 'a', 'b' und 'c' wird die Klassenmethode aufgerufen, um anzuzeigen, wie oft sie gezählt wurde. Da die Instanz dreimal erstellt wurde, können Sie sehen, dass "Anzahl" durch "3" hinzugefügt wird. Wenn Sie eine Klassenmethode aufrufen, wird sie nicht hinzugefügt, da die Instanz nicht erstellt wird.
Ich möchte hier die Unterschiede zwischen ihnen zusammenfassen.
#Klassenmethode
@classmethod
def Methodenname(cls,Argument 1,Argument 2, ...):
#Methode
def Methodenname(self,Argument 1,Argument 2, ...):
#Funktion
def Funktionsname():
Sie können den Unterschied erkennen, indem Sie sie auf diese Weise anordnen. ① Unterschied zwischen Klassenmethode und Methode -> Methoden können nicht aufgerufen werden, ohne eine Instanz zu erstellen, aber Klassenmethoden können direkt von der Klasse aufgerufen werden.
② Unterschied zwischen Klassenmethode und Funktion -> Sie können die Klasse selbst als 'cls' als erstes Argument erhalten. Ein weiterer Unterschied besteht darin, dass es sich um eine Klasse handelt, sodass Sie es durch Importieren der Klasse verwenden können.
Von hier aus werden wir statische Methoden erklären. Die statische Methode ist eine Klassenmethode, der Unterschied besteht jedoch darin, dass Sie kein Argument angeben müssen. Mal sehen.
@staticmethod
def Methodenname():
print("Dies ist eine statische Methode.")
#Anruf
Name der Klasse.Methodenname()
Als es eine Klassenmethode war, gab es im ersten Argument etwas namens 'cls', aber es ist nicht in der statischen Methode. Es ist leicht zu verstehen, wenn Sie denken, dass es fast die gleiche Methode ist. Obwohl es nicht oft verwendet wird, zeichnet es sich dadurch aus, dass es wie die Klassenmethode direkt aus der Klasse aufgerufen werden kann.
In diesem Artikel habe ich über "Klassenmethoden" und "statische Methoden" geschrieben. Artikel werden in Zukunft aktualisiert. Artikel bis zum letzten Mal ↓ ↓ ↓ Dies und das von Python-Eigenschaften
Recommended Posts