logo

Metoda razreda vs Statična metoda v Pythonu

V tem članku bomo obravnavali osnovne 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 to je izraz, ki se ovrednoti po definiranju vaše funkcije. 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. Lahko na primer spremeni spremenljivko razreda, ki bo uporabna za vse primerke.

Kaj je statična metoda v Pythonu?

A 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:  

    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 je C++ oz 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. 

jvm v Javi

En preprost primer:

metoda razreda:

Python
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 

Izhod
10

Statična metoda: -

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

Izhod:

21 25 True

Pomožni prostor: O(1)

Ustvari kviz