Klassenmethode

Der @ classmethod-Dekorator ist ein integrierter Funktionsdekorator , der als Ausdruck ausgewertet wird, nachdem Ihre Funktion definiert wurde. Das Ergebnis dieser Auswertung schattiert Ihre Funktionsdefinition.
Eine Klassenmethode empfängt die Klasse als implizites erstes Argument, genau wie eine Instanzmethode die Instanz empfängt.
Syntax:

Klasse C (Objekt):
    @classmethod
    def fun (cls, arg1, arg2, ...):
       ....
fun: Funktion, die in eine Klassenmethode konvertiert werden muss, gibt
 zurück: eine Klassenmethode für Funktion.
  • Eine Klassenmethode ist eine Methode, die an die Klasse und nicht an das Objekt der Klasse gebunden ist.
  • Sie haben Zugriff auf den Status der Klasse, da ein Klassenparameter verwendet wird, der auf die Klasse und nicht auf die Objektinstanz verweist.
  • Es kann einen Klassenstatus ändern, der für alle Instanzen der Klasse gilt. Beispielsweise kann eine Klassenvariable geändert werden, die auf alle Instanzen anwendbar ist.

Statische Methode

Eine statische Methode erhält kein implizites erstes Argument.
Syntax:

Klasse C (Objekt):
    @staticmethod
    def fun (arg1, arg2, ...):
        ... gibt 
zurück: eine statische Methode für Funktionsspaß.
  • Eine statische Methode ist auch eine Methode, die an die Klasse und nicht an das Objekt der Klasse gebunden ist.
  • Eine statische Methode kann nicht auf den Klassenstatus zugreifen oder diesen ändern.
  • Es ist in einer Klasse vorhanden, da es sinnvoll ist, dass die Methode in der Klasse vorhanden ist.

Klassenmethode vs statische Methode



  • Eine Klassenmethode verwendet cls als ersten Parameter, während eine statische Methode keine spezifischen Parameter benötigt.
  • Eine Klassenmethode kann auf den Klassenstatus zugreifen oder diesen ändern, während eine statische Methode nicht darauf zugreifen oder ihn ändern kann.
  • Im Allgemeinen wissen statische Methoden nichts über den Klassenstatus. Es handelt sich um Dienstprogrammmethoden, die einige Parameter verwenden und diese Parameter bearbeiten. Andererseits müssen Klassenmethoden class als Parameter haben.
  • Wir verwenden @classmethod decorator in Python, um eine Klassenmethode zu erstellen, und wir verwenden @staticmethod decorator, um eine statische Methode in Python zu erstellen.

Wann was verwenden?

  • Wir verwenden im Allgemeinen die Klassenmethode, um Factory-Methoden zu erstellen. Factory-Methoden geben ein Klassenobjekt (ähnlich einem Konstruktor) für verschiedene Anwendungsfälle zurück.
  • Wir verwenden im Allgemeinen statische Methoden, um Dienstprogrammfunktionen zu erstellen.

Wie definiere ich eine Klassenmethode und eine statische Methode?

Um eine Klassenmethode in Python zu definieren, verwenden wir @classmethod decorator und um eine statische Methode zu definieren, verwenden wir @staticmethod decorator.
Schauen wir uns ein Beispiel an, um den Unterschied zwischen beiden zu verstehen. Nehmen wir an, wir möchten eine Klassenperson erstellen. Python unterstützt keine Methodenüberladung wie C ++ oder Java, daher verwenden wir Klassenmethoden, um Factory-Methoden zu erstellen. Im folgenden Beispiel verwenden wir eine Klassenmethode, um ein Personenobjekt ab dem Geburtsjahr zu erstellen.

Wie oben erläutert, verwenden wir statische Methoden, um Dienstprogrammfunktionen zu erstellen. Im folgenden Beispiel verwenden wir eine statische Methode, um zu überprüfen, ob eine Person erwachsen ist oder nicht.

Implementierung

from datetime import date 
   
class Person: 
    def __init__(self, name, age): 
        self.name = name 
        self.age = age 
       
    
    @classmethod
    def fromBirthYear(cls, name, year): 
        return cls(name, date.today().year - year) 
       
    
    @staticmethod
    def isAdult(age): 
        return age > 18
   
person1 = Person('mayank', 21) 
person2 = Person.fromBirthYear('mayank', 1996) 
   
print (person1.age) 
print (person2.age) 
   
print (Person.isAdult(22)) 

Ausgabe

21
21
Wahr

Dieser Artikel wurde von Mayank Agrawal verfasst . Wenn Ihnen GeeksforGeeks gefällt und Sie einen Beitrag leisten möchten, können Sie auch einen Artikel mit Contrib.geeksforgeeks.org schreiben oder Ihren Artikel an Contribute@geeksforgeeks.org senden . Sehen Sie sich Ihren Artikel auf der GeeksforGeeks-Hauptseite an und helfen Sie anderen Geeks.

Bitte schreiben Sie Kommentare, wenn Sie etwas Falsches finden oder weitere Informationen zu dem oben diskutierten Thema teilen möchten.