Klassemetode vs statisk metode i Python

I denne artikel vil vi dække det grundlæggende forskel mellem klassemetoden vs statisk metode i Python og hvornår man skal bruge klassemetoden og den statiske metode i python.

Hvad er klassemetode i Python?

@classmethod-dekoratøren er en indbygget funktionsdekorator, der er et udtryk, der bliver evalueret efter din funktion er defineret. Resultatet af denne evaluering skygger din funktionsdefinition. EN klasse metode modtager klassen som et implicit første argument, ligesom en instansmetode modtager instansen

Syntaks Python-klassemetode:

 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. 
  • En klassemetode er en metode, der er bundet til klasse og ikke klassens objekt.
  • De har adgang til klassens tilstand, da det kræver en klasseparameter, der peger på klassen og ikke objektforekomsten.
  • Det kan ændre en klassetilstand, der vil gælde på tværs af alle forekomster af klassen. For eksempel kan den ændre en klassevariabel, der vil være gældende for alle forekomster.

Hvad er den statiske metode i Python?

En statisk metode modtager ikke et implicit første argument. En statisk metode er også en metode, der er bundet til klassen og ikke klassens objekt. Denne metode kan ikke få adgang til eller ændre klassetilstanden. Det er til stede i en klasse, fordi det giver mening, at metoden er til stede i klassen.

Syntaks Python statisk metode:

 class C(object):  @staticmethod  def fun(arg1, arg2, ...):  ... returns: a static method for function fun. 

Klassemetode vs statisk metode

Forskellen mellem klassemetoden og den statiske metode er:

  • En klassemetode tager cls som den første parameter, mens en statisk metode ikke behøver specifikke parametre.
  • En klassemetode kan få adgang til eller ændre klassetilstanden, mens en statisk metode ikke kan få adgang til eller ændre den.
  • Generelt ved statiske metoder intet om klassetilstanden. De er værktøjsmetoder, der tager nogle parametre og arbejder på disse parametre. På den anden side skal klassemetoder have klasse som parameter.
  • Vi bruger @classmethod decorator i python til at skabe en klassemetode, og vi bruger @staticmethod decorator til at skabe en statisk metode i python.

Hvornår skal man bruge klassen eller den statiske metode?

  • Vi bruger generelt klassemetoden til at skabe fabriksmetoder. Fabriksmetoder returnerer klasseobjekter (ligner en konstruktør) til forskellige use cases.
  • Vi bruger generelt statiske metoder til at skabe hjælpefunktioner.

Hvordan definerer man en klassemetode og en statisk metode?

For at definere en klassemetode i python bruger vi @classmethod decorator, og for at definere en statisk metode bruger vi @staticmethod decorator.
Lad os se på et eksempel for at forstå forskellen mellem dem begge. Lad os sige, at vi ønsker at skabe en klasseperson. Nu understøtter python ikke metodeoverbelastning som C++ eller Java, så vi bruger klassemetoder til at oprette fabriksmetoder. I nedenstående eksempel bruger vi en klassemetode til at oprette et personobjekt fra fødselsåret.

Som forklaret ovenfor bruger vi statiske metoder til at skabe hjælpefunktioner. I eksemplet nedenfor bruger vi en statisk metode til at kontrollere, om en person er voksen eller ej.

Et enkelt eksempel:

klasse metode:

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>

Produktion

10 

Statisk metode: -

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> ))>

Produktion

30 30 

Nedenfor er den komplette implementering

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> ))>

Produktion:

21 25 True 

Hjælpeplads: O(1)