Klassenmethode vs. statische Methode in Python
In diesem Artikel werden wir die Grundlagen behandeln Unterschied zwischen der Klassenmethode und der statischen Methode in Python und wann die Klassenmethode und die statische Methode verwendet werden sollen in Python.
Was ist eine Klassenmethode in Python?
Der @classmethod-Dekorator ist ein integrierter Funktionsdekorator, bei dem es sich um einen Ausdruck handelt, der ausgewertet wird, nachdem Ihre Funktion definiert wurde. Das Ergebnis dieser Auswertung überschattet Ihre Funktionsdefinition. A Klassenmethode empfängt die Klasse als implizites erstes Argument, genau wie eine Instanzmethode die Instanz empfängt
Syntax Python-Klassenmethode:
class C(object): @classmethod def fun(cls, arg1, arg2, ...): .... fun: function that needs to be converted into a class method returns: a class method for function.
- Eine Klassenmethode ist eine Methode, die an die gebunden ist Klasse und nicht das Objekt der Klasse.
- 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. Beispielsweise kann eine Klassenvariable geändert werden, die auf alle Instanzen anwendbar ist.
Was ist die statische Methode in Python?
Eine statische Methode erhält kein implizites erstes Argument. Eine statische Methode ist auch eine Methode, die an die Klasse und nicht an das Objekt der Klasse gebunden ist. Diese Methode kann nicht auf den Klassenstatus zugreifen oder ihn ändern. Sie ist in einer Klasse vorhanden, weil es sinnvoll ist, dass die Methode in der Klasse vorhanden ist.
Syntax der statischen Python-Methode:
class C(object): @staticmethod def fun(arg1, arg2, ...): ... returns: a static method for function fun.
Klassenmethode vs. statische Methode
Der Unterschied zwischen der Klassenmethode und der statischen Methode ist:
- 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.
Wann sollte die Klasse oder die statische Methode verwendet werden?
- Wir verwenden im Allgemeinen die Klassenmethode, um Factory-Methoden zu erstellen. Factory-Methoden geben Klassenobjekte (ähnlich einem Konstruktor) für verschiedene Anwendungsfälle zurück.
- Wir verwenden im Allgemeinen statische Methoden, um Hilfsfunktionen zu erstellen.
Wie definiere ich eine Klassenmethode und eine statische Methode?
Um eine Klassenmethode in Python zu definieren, verwenden wir den @classmethod-Dekorator, und um eine statische Methode zu definieren, verwenden wir den @staticmethod-Dekorator.
Schauen wir uns ein Beispiel an, um den Unterschied zwischen beiden zu verstehen. Nehmen wir an, wir möchten eine Klasse Person erstellen. Da Python keine Methodenüberladung wie C++ oder Java unterstützt, verwenden wir Klassenmethoden, um Factory-Methoden zu erstellen. Im folgenden Beispiel verwenden wir eine Klassenmethode, um ein Personenobjekt aus dem Geburtsjahr zu erstellen.
Wie oben erklärt, verwenden wir statische Methoden, um Hilfsfunktionen zu erstellen. Im folgenden Beispiel verwenden wir eine statische Methode, um zu überprüfen, ob eine Person erwachsen ist oder nicht.
Ein einfaches Beispiel:
Klassenmethode:
Python3
class> MyClass:> > def> __init__(> self> , value):> > self> .value> => value> > def> get_value(> self> ):> > return> self> .value> # Create an instance of MyClass> obj> => MyClass(> 10> )> # Call the get_value method on the instance> print> (obj.get_value())> # Output: 10> |
Ausgabe
10
Statische Methode:-
Python3
class> MyClass:> > def> __init__(> self> , value):> > self> .value> => value> > @staticmethod> > def> get_max_value(x, y):> > return> max> (x, y)> # Create an instance of MyClass> obj> => MyClass(> 10> )> print> (MyClass.get_max_value(> 20> ,> 30> ))> print> (obj.get_max_value(> 20> ,> 30> ))> |
Ausgabe
30 30
Nachfolgend finden Sie die vollständige Implementierung
Python3
# Python program to demonstrate> # use of 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 25 True
Hilfsraum: O(1)