I denne artikkelen vil vi dekke det grunnleggende forskjellen mellom klassemetoden vs statisk metode i Python og når du skal bruke klassemetoden og statisk metode i python.
Hva er klassemetode i Python?
@classmethod-dekoratoren er en innebygd funksjonsdekorator som er et uttrykk som blir evaluert etter at funksjonen din er definert. Resultatet av den evalueringen skygger funksjonsdefinisjonen din. EN klassemetoden mottar klassen som et implisitt første argument, akkurat som en instansmetode mottar 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 som er bundet til klasse og ikke objektet for klassen.
- De har tilgang til klassens tilstand ettersom den krever en klasseparameter som peker til klassen og ikke objektforekomsten.
- Den kan endre en klassetilstand som vil gjelde for alle forekomster av klassen. For eksempel kan den endre en klassevariabel som vil være gjeldende for alle forekomstene.
Hva er den statiske metoden i Python?
En statisk metode mottar ikke et implisitt første argument. En statisk metode er også en metode som er bundet til klassen og ikke objektet til klassen. Denne metoden kan ikke få tilgang til eller endre klassetilstanden. Den er tilstede i en klasse fordi det er fornuftig at metoden er tilstede 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
Forskjellen mellom klassemetoden og den statiske metoden er:
- En klassemetode tar cls som den første parameteren mens en statisk metode ikke trenger noen spesifikke parametere.
- En klassemetode kan få tilgang til eller endre klassetilstanden mens en statisk metode ikke kan få tilgang til eller endre den.
- Generelt vet statiske metoder ingenting om klassetilstanden. De er verktøy-metoder som tar noen parametere og jobber med disse parameterne. På den annen side må klassemetoder ha klasse som parameter.
- Vi bruker @classmethod decorator i python for å lage en klassemetode og vi bruker @staticmethod decorator for å lage en statisk metode i python.
Når skal man bruke klasse- eller statisk metode?
- Vi bruker vanligvis klassemetoden for å lage fabrikkmetoder. Fabrikkmetoder returnerer klasseobjekter (som ligner på en konstruktør) for forskjellige brukstilfeller.
- Vi bruker vanligvis statiske metoder for å lage verktøyfunksjoner.
Hvordan definere en klassemetode og en statisk metode?
For å definere en klassemetode i python bruker vi @classmethod decorator, og for å definere en statisk metode bruker vi @staticmethod decorator.
La oss se på et eksempel for å forstå forskjellen mellom dem begge. La oss si at vi ønsker å lage en klasseperson. Nå støtter ikke python metodeoverbelastning som C++ eller Java, så vi bruker klassemetoder for å lage fabrikkmetoder. I eksemplet nedenfor bruker vi en klassemetode for å lage et personobjekt fra fødselsår.
Som forklart ovenfor bruker vi statiske metoder for å lage verktøyfunksjoner. I eksemplet nedenfor bruker vi en statisk metode for å sjekke om en person er voksen eller ikke.
Et enkelt eksempel:
klassemetode:
Python3
forskjellen mellom array og arraylist
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> |
>
>Produksjon
10>
Statisk metode:-
Python3
java samlinger rammeverk
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>))> |
>
>Produksjon
30 30>
Nedenfor er den komplette implementeringen
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>))> |
>
>
Produksjon:
21 25 True>
Hjelpeplass: O(1)