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