[PYTHON] Verschiedene Klassenmethoden und statische Methoden

Einführung

In diesem Artikel werde ich darüber schreiben, was eine "Klassenmethode" ist. Artikel bis zum letzten Mal ↓ ↓ ↓ Dies und das von Python-Eigenschaften

Was ist eine Klassenmethode?

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.

Klassenvariable

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.

Beispiel für die Verwendung der Klassenmethode

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.

Erstellen Sie eine Instanz

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.

Was ist der Unterschied zwischen einer Klassenmethode und einer Methode oder Funktion?

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.

Statische Methode

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.

Am Ende

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

Verschiedene Klassenmethoden und statische Methoden
Klassen- und statische Methoden
Beispiel für die Verwendung von Klassenvariablen und Klassenmethoden
[Python] Unterschied zwischen Klassenmethode und statischer Methode
Klassenmethode statische Methode
Über Klasse und Instanz
Grundmethode der [Python] -Klasse
Python: Klassen- und Instanzvariablen
Verschiedene Möglichkeiten, Mnist zu importieren
Python-Klassen- und Instanzvariablen
Klassenvererbung und Superfunktion
Ich werde die Klasse erben und überschreiben
Kombinationsoptimierungstypische Probleme und wie es geht
Ordnungsgemäße Verwendung der Instanzmethode und der Klassenmethode
Perl-Objekt und Python-Klasse Teil 2.
Python-Klassendefinitionen und Instanzbehandlung
Berechnung der selbst erstellten Klasse und der vorhandenen Klasse
(Für mich) Flask_ex (Vorlagen und statische)
Perl-Objekt und Python-Klasse Teil 1.
Python-Klassen und -Instanzen, Instanzmethoden