Tässä artikkelissa käsittelemme perusasiat ero luokkamenetelmän ja staattisen menetelmän välillä Pythonissa ja milloin käyttää luokkamenetelmää ja staattista menetelmää pythonissa.
Mikä on Pythonin luokkamenetelmä?
@classmethod-decorator on sisäänrakennettu funktion koristelu, joka on lauseke, joka arvioidaan sen jälkeen, kun funktiosi on määritetty. Tämän arvioinnin tulos varjostaa funktion määritelmääsi. A luokan menetelmä vastaanottaa luokan implisiittisenä ensimmäisenä argumenttina, aivan kuten ilmentymämenetelmä vastaanottaa ilmentymän
on yhtä kuin merkkijono javassa
Syntaksi Python-luokkamenetelmä:
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.>
- Luokkametodi on menetelmä, joka on sidottu luokkaa eikä luokan kohde.
- Heillä on pääsy luokan tilaan, koska se ottaa luokkaparametrin, joka osoittaa luokkaan eikä objektiinstanssiin.
- Se voi muokata luokan tilaa, joka koskisi kaikkia luokan esiintymiä. Se voi esimerkiksi muokata luokkamuuttujaa, jota voidaan soveltaa kaikkiin esiintymiin.
Mikä on Pythonin staattinen menetelmä?
Staattinen menetelmä ei saa implisiittistä ensimmäistä argumenttia. Staattinen menetelmä on myös menetelmä, joka on sidottu luokkaan eikä luokan objektiin. Tämä menetelmä ei voi käyttää tai muokata luokan tilaa. Se on läsnä luokassa, koska menetelmän on järkevää olla läsnä luokassa.
Syntaksi Pythonin staattinen menetelmä:
class C(object): @staticmethod def fun(arg1, arg2, ...): ... returns: a static method for function fun.>
Luokkamenetelmä vs staattinen menetelmä
Luokkamenetelmän ja staattisen menetelmän välinen ero on:
- Luokkamenetelmä ottaa cls:n ensimmäisenä parametrina, kun taas staattinen menetelmä ei tarvitse erityisiä parametreja.
- Luokkamenetelmä voi käyttää tai muokata luokan tilaa, kun taas staattinen menetelmä ei voi käyttää tai muokata sitä.
- Yleensä staattiset menetelmät eivät tiedä mitään luokan tilasta. Ne ovat apuohjelmatyyppisiä menetelmiä, jotka ottavat joitain parametreja ja toimivat näiden parametrien mukaan. Toisaalta luokkametodeissa täytyy olla luokka parametrina.
- Käytämme @classmethod decorator pythonissa luokkametodin luomiseen ja @staticmethod decorator staattisen menetelmän luomiseen pythonissa.
Milloin luokkaa tai staattista menetelmää käytetään?
- Käytämme yleensä luokkamenetelmää tehdasmenetelmien luomiseen. Tehdasmenetelmät palauttavat luokkaobjekteja ( samankaltaisia kuin konstruktori ) eri käyttötapauksiin.
- Käytämme yleensä staattisia menetelmiä apufunktioiden luomiseen.
Miten määritellään luokkametodi ja staattinen menetelmä?
Luokkametodin määrittämiseen pythonissa käytämme @classmethod decorator ja staattisen menetelmän määrittämiseen @staticmethod decorator.
Katsotaanpa esimerkkiä ymmärtääksemme eron näiden kahden välillä. Oletetaan, että haluamme luoda luokan Henkilön. Nyt python ei tue menetelmien ylikuormitusta, kuten C++ tai Java, joten käytämme luokkamenetelmiä tehdasmenetelmien luomiseen. Alla olevassa esimerkissä käytämme luokkametodia henkilöobjektin luomiseen syntymävuodesta lähtien.
Kuten yllä selitettiin, käytämme staattisia menetelmiä aputoimintojen luomiseen. Alla olevassa esimerkissä käytämme staattista menetelmää tarkistaaksemme, onko henkilö aikuinen vai ei.
Yksi yksinkertainen esimerkki:
luokan menetelmä:
vastaavuuslakeja
Python 3
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> |
>
>Lähtö
10>
Staattinen menetelmä: -
epädeterministiset äärelliset automaatit
Python 3
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>))> |
>
>Lähtö
boolean vuonna c
30 30>
Alla on täydellinen toteutus
Python 3
# 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>>>=> Person(>'mayank'>,>21>)> person2>=> Person.fromBirthYear(>'mayank'>,>1996>)> print>(person1.age)> print>(person2.age)> # print the result> print>(Person.isAdult(>22>))> |
parseint java
>
>
Lähtö:
21 25 True>
Aputila: O(1)