logo

Metoda razreda vs Statična metoda v Pythonu

V tem članku bomo obravnavali osnove razlika med razredno metodo in statično metodo v Pythonu in kdaj uporabiti metodo razreda in statično metodo v pythonu.

Kaj je metoda razreda v Pythonu?

Dekorater @classmethod je vgrajen dekorater funkcije, ki je izraz, ki se ovrednoti, ko je vaša funkcija definirana. Rezultat te ocene zasenči vašo definicijo funkcije. A razredna metoda prejme razred kot implicitni prvi argument, tako kot metoda primerka prejme primerek

Sintaksa Metoda razreda Python:



 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.>
  • Metoda razreda je metoda, ki je vezana na razred in ne predmet razreda.
  • Imajo dostop do stanja razreda, saj ima parameter razreda, ki kaže na razred in ne na primerek objekta.
  • Lahko spremeni stanje razreda, ki bi veljalo za vse primerke razreda. Na primer, lahko spremeni spremenljivko razreda, ki bo uporabna za vse primerke.

Kaj je statična metoda v Pythonu?

Statična metoda ne prejme implicitnega prvega argumenta. Statična metoda je tudi metoda, ki je vezana na razred in ne na objekt razreda. Ta metoda ne more dostopati do stanja razreda ali ga spreminjati. Prisotna je v razredu, ker je smiselno, da je metoda prisotna v razredu.

Statična metoda sintakse Python:

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

Metoda razreda v primerjavi s statično metodo

Razlika med metodo razreda in statično metodo je:

  • Metoda razreda vzame cls kot prvi parameter, medtem ko statična metoda ne potrebuje posebnih parametrov.
  • Metoda razreda lahko dostopa do stanja razreda ali ga spreminja, medtem ko statična metoda ne more dostopati ali ga spreminjati.
  • Na splošno statične metode ne vedo ničesar o stanju razreda. So metode pomožnega tipa, ki vzamejo nekaj parametrov in delajo na teh parametrih. Po drugi strani pa morajo metode razreda imeti razred kot parameter.
  • V pythonu uporabljamo dekorater @classmethod za ustvarjanje metode razreda in @staticmethod dekorater za ustvarjanje statične metode v pythonu.

Kdaj uporabiti razredno ali statično metodo?

  • Na splošno uporabljamo metodo razreda za ustvarjanje tovarniških metod. Tovarniške metode vrnejo objekte razreda (podobno kot konstruktor) za različne primere uporabe.
  • Na splošno uporabljamo statične metode za ustvarjanje uporabnih funkcij.

Kako definirati metodo razreda in statično metodo?

Za definiranje metode razreda v pythonu uporabljamo dekorator @classmethod, za definiranje statične metode pa uporabljamo dekorator @staticmethod.
Oglejmo si primer, da razumemo razliko med obema. Recimo, da želimo ustvariti razred Oseba. Zdaj python ne podpira preobremenitve metod, kot sta C++ ali Java, zato uporabljamo metode razreda za ustvarjanje tovarniških metod. V spodnjem primeru uporabljamo metodo razreda za ustvarjanje objekta osebe iz leta rojstva.

Kot je razloženo zgoraj, uporabljamo statične metode za ustvarjanje uporabnih funkcij. V spodnjem primeru uporabljamo statično metodo za preverjanje, ali je oseba odrasla ali ne.

En preprost primer:

metoda razreda:

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>

kako prenesti niz v int v Javi

>

>

Izhod

10>

Statična metoda: -

ali lahko razred razširi več razredov

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

>

>

Izhod

30 30>

Spodaj je popolna izvedba

Python3

java sinhronizacija




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

>

linux, kako preimenovati imenik
>

Izhod:

21 25 True>

Pomožni prostor: O(1)