logo

Klassmetod vs statisk metod i Python

I den här artikeln kommer vi att täcka det grundläggande skillnad mellan klassmetoden vs statisk metod i Python och när man ska använda klassmetoden och statisk metod i pyton.

Vad är klassmetoden i Python?

@classmethod-dekoratören är en inbyggd funktionsdekoratör som är ett uttryck som utvärderas efter att din funktion har definierats. Resultatet av den utvärderingen skuggar din funktionsdefinition. A klass metod tar emot klassen som ett implicit första argument, precis som en instansmetod tar emot instansen



Syntax Python-klassmetod:

 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 klassmetod är en metod som är bunden till klass och inte föremålet för klassen.
  • De har tillgång till klassens tillstånd eftersom den kräver en klassparameter som pekar på klassen och inte objektinstansen.
  • Det kan ändra ett klasstillstånd som skulle gälla för alla instanser av klassen. Till exempel kan den modifiera en klassvariabel som kommer att vara tillämplig på alla instanser.

Vad är den statiska metoden i Python?

En statisk metod får inte ett implicit första argument. En statisk metod är också en metod som är bunden till klassen och inte klassens objekt. Den här metoden kan inte komma åt eller ändra klasstillståndet. Det finns i en klass eftersom det är vettigt att metoden finns i klassen.

Syntax Python statisk metod:



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

Klassmetod vs statisk metod

Skillnaden mellan klassmetoden och den statiska metoden är:

  • En klassmetod tar cls som den första parametern medan en statisk metod inte behöver några specifika parametrar.
  • En klassmetod kan komma åt eller ändra klasstillståndet medan en statisk metod inte kan komma åt eller ändra den.
  • I allmänhet vet statiska metoder ingenting om klasstillståndet. De är metoder av verktygstyp som tar vissa parametrar och arbetar med dessa parametrar. Å andra sidan måste klassmetoder ha klass som parameter.
  • Vi använder @classmethod decorator i python för att skapa en klassmetod och vi använder @staticmethod decorator för att skapa en statisk metod i python.

När ska man använda klassmetoden eller statisk metod?

  • Vi använder vanligtvis klassmetoden för att skapa fabriksmetoder. Fabriksmetoder returnerar klassobjekt (liknande en konstruktor) för olika användningsfall.
  • Vi använder i allmänhet statiska metoder för att skapa verktygsfunktioner.

Hur definierar man en klassmetod och en statisk metod?

För att definiera en klassmetod i python använder vi @classmethod decorator, och för att definiera en statisk metod använder vi @staticmethod decorator.
Låt oss titta på ett exempel för att förstå skillnaden mellan dem båda. Låt oss säga att vi vill skapa en klassperson. Nu stöder python inte metodöverbelastning som C++ eller Java så vi använder klassmetoder för att skapa fabriksmetoder. I exemplet nedan använder vi en klassmetod för att skapa ett personobjekt från födelseår.

Som förklarats ovan använder vi statiska metoder för att skapa verktygsfunktioner. I exemplet nedan använder vi en statisk metod för att kontrollera om en person är vuxen eller inte.



Ett enkelt exempel:

nätverk och internet

klass metod:

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>

arraylist

>

>

Produktion

10>

Statisk metod:-

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

delsträngsfunktion java
30 30>

Nedan är den fullständiga implementeringen

Python3

strängarray i c-språk




# 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älputrymme: O(1)