classmethod() in Python

Der Klassenmethode() ist eine in Python integrierte Funktion, die eine Klassenmethode für eine bestimmte Funktion zurückgibt.

classmethod() in der Python-Syntax

Syntax: Klassenmethode (Funktion)

Parameter: Diese Funktion akzeptiert den Funktionsnamen als Parameter.

Rückgabetyp: Diese Funktion gibt die konvertierte Klassenmethode zurück.

Python-classmethod()-Funktion

Die classmethod()-Methoden sind an eine Klasse und nicht an ein Objekt gebunden. Klassenmethoden können sowohl von der Klasse als auch vom Objekt aufgerufen werden. Diese Methoden können mit einer Klasse oder mit einem Objekt aufgerufen werden.

Klassenmethode vs. statische Methode

Der grundlegende Unterschied zwischen dem Klassenmethode vs. statische Methode in Python und wann die Klassenmethode und die statische Methode verwendet werden sollen Python .

  • 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 ihn ändern, während eine statische Methode nicht darauf zugreifen oder ihn ändern kann.
  • Im Allgemeinen wissen statische Methoden nichts über den Klassenstatus. Dabei handelt es sich um Dienstprogrammmethoden, die einige Parameter annehmen und diese Parameter bearbeiten. Andererseits müssen Klassenmethoden die Klasse als Parameter haben.
  • Wir verwenden den @classmethod-Dekorator in Python, um eine Klassenmethode zu erstellen, und wir verwenden den @staticmethod-Dekorator, um eine statische Methode in Python zu erstellen.

Beispiel einer Klassenmethode in Python

Erstellen Sie eine einfache Klassenmethode

In diesem Beispiel werden wir sehen, wie man eine Klassenmethode in Python erstellt. Zu diesem Zweck haben wir eine Klasse namens Geeks mit einer Mitgliedsvariablen „course“ und eine Funktion namens „purchase“ erstellt, die das Objekt druckt. Jetzt haben wir die Methode übergeben Geeks.purchase> in eine Klassenmethode mit dem @classmethod> Dekorator, der die Methode in eine Klassenmethode umwandelt. Wenn die Klassenmethode vorhanden ist, können wir die Funktion Purchase aufrufen, ohne ein Funktionsobjekt zu erstellen, indem wir direkt den Klassennamen Geeks verwenden.

Python3




class> geeks:> > course> => 'DSA'> > def> purchase(obj):> > print> (> 'Purchase course : '> , obj.course)> geeks.purchase> => classmethod> (geeks.purchase)> geeks.purchase()>

Ausgabe

Purchase course : DSA 

Erstellen Sie eine Klassenmethode mit classmethod()

Die Klassenmethode „print_name“ wurde vor dem Erstellen dieser Zeile „print_name()“ erstellt. Sie kann nur mit einem Objekt aufgerufen werden, nicht mit der Klasse. Jetzt kann diese Methode als Klassenmethode „print_name()“ aufgerufen werden und wird als Klassenmethode bezeichnet.

Python3




class> Student:> > # create a variable> > name> => 'Geeksforgeeks'> > # create a function> > def> print_name(obj):> > print> (> 'The name is : '> , obj.name)> # create print_name classmethod> # before creating this line print_name()> # It can be called only with object not with class> Student.print_name> => classmethod> (Student.print_name)> # now this method can be called as classmethod> # print_name() method is called a class method> Student.print_name()>

Ausgabe

The name is : Geeksforgeeks 

Factory-Methode unter Verwendung einer Klassenmethode

Die Verwendung der Funktion classmethod() wird in Fabrikentwurfsmustern verwendet, bei denen wir viele Funktionen mit dem Klassennamen und nicht mit einem Objekt aufrufen möchten.

Python3




# Python program to demonstrate> # use of a class method and static method.> from> datetime> import> date> class> Person:> > def> __init__(> self> , name, age):> > self> .name> => name> > self> .age> => age> > # a class method to create a> > # Person object by birth year.> > @classmethod> > def> fromBirthYear(> cls> , name, year):> > return> cls> (name, date.today().year> -> year)> > def> display(> self> ):> > print> (> 'Name : '> ,> self> .name,> 'Age : '> ,> self> .age)> person> => Person(> 'mayank'> ,> 21> )> person.display()>

Ausgabe

Name : mayank Age : 21 

Wie funktioniert die Klassenmethode für die Vererbung?

In diesem Beispiel erstellen wir eine Python-Klassenhierarchie mit zwei Klassen: Person> Und Man> und demonstriert die Verwendung von Klassenmethoden und Vererbung.

Python3




from> datetime> import> date> # random Person> class> Person:> > def> __init__(> self> , name, age):> > self> .name> => name> > self> .age> => age> > @staticmethod> > def> from_FathersAge(name, fatherAge, fatherPersonAgeDiff):> > return> Person(name, date.today().year> -> fatherAge> +> fatherPersonAgeDiff)> > @classmethod> > def> from_BirthYear(> cls> , name, birthYear):> > return> cls> (name, date.today().year> -> birthYear)> > def> display(> self> ):> > print> (> self> .name> +> ''s age is: '> +> str> (> self> .age))> class> Man(Person):> > sex> => 'Female'> man> => Man.from_BirthYear(> 'John'> ,> 1985> )> print> (> isinstance> (man, Man))> man1> => Man.from_FathersAge(> 'John'> ,> 1965> ,> 20> )> print> (> isinstance> (man1, Man))>

Ausgabe

True False 

Python @classmethod-Dekorator

Der @classmethod-Dekorator ist integriert Funktionsdekorateur Dabei handelt es sich um einen Ausdruck, der ausgewertet wird, nachdem Ihre Funktion definiert wurde. Das Ergebnis dieser Auswertung überschattet Ihre Funktionsdefinition. Eine Klassenmethode empfängt die Klasse als implizites erstes Argument, genau wie eine Instanzmethode die Instanz empfängt.

Syntax der Klassenmethode Decorator

Klasse C(Objekt):

@classmethod

def fun(cls, arg1, arg2, …):

….

Wo,

  • Spaß: die Funktion, die in eine Klassenmethode umgewandelt werden muss
  • kehrt zurück: eine Klassenmethode für Funktion.

Notiz:

  • 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 diese einen Klassenparameter annimmt, der auf die Klasse und nicht auf die Objektinstanz verweist.
  • Es kann einen Klassenstatus ändern, der für alle Instanzen der Klasse gilt. Es kann beispielsweise eine Klassenvariable ändern, die auf alle Instanzen anwendbar wäre.

Beispiel

Im folgenden Beispiel verwenden wir staticmethod() und classmethod(), um zu prüfen, ob eine Person erwachsen ist oder nicht.

Python3




# Python program to demonstrate> # use of a class method and static method.> from> datetime> import> date> class> Person:> > def> __init__(> self> , name, age):> > self> .name> => name> > self> .age> => age> > # a class method to create a> > # Person object by birth year.> > @classmethod> > def> fromBirthYear(> cls> , name, year):> > return> cls> (name, date.today().year> -> year)> > # a static method to check if a> > # Person is adult or not.> > @staticmethod> > def> isAdult(age):> > return> age>> 18> person1> => Person(> 'mayank'> ,> 21> )> person2> => Person.fromBirthYear(> 'mayank'> ,> 1996> )> print> (person1.age)> print> (person2.age)> # print the result> print> (Person.isAdult(> 22> ))>

Ausgabe

21 27 True