logo

Klasna metoda vs statička metoda u Pythonu

U ovom ćemo članku pokriti osnovne razlika između metode klase i statičke metode u Pythonu i kada koristiti metodu klase i statičku metodu u pythonu.

Što je metoda klase u Pythonu? 

@classmethod dekorater je ugrađen funkcija dekorater to je izraz koji se procjenjuje nakon definiranja vaše funkcije. Rezultat te evaluacije zasjenjuje vašu definiciju funkcije. A razredna metoda prima klasu kao implicitni prvi argument baš kao što metoda instance prima instancu 

Metoda sintakse Python klase:  



    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 klase je metoda koja je vezana za razreda a ne objekt klase.
  • Oni imaju pristup stanju klase budući da uzima parametar klase koji pokazuje na klasu, a ne na instancu objekta.
  • Može modificirati stanje klase koje bi se primijenilo na sve instance klase. Na primjer, može modificirati varijablu klase koja će biti primjenjiva na sve instance.

Što je statička metoda u Pythonu?

A statička metoda ne prima implicitni prvi argument. Statička metoda također je metoda koja je vezana za klasu, a ne za objekt klase. Ova metoda ne može pristupiti niti modificirati stanje klase. Prisutan je u klasi jer ima smisla da metoda bude prisutna u klasi.

Sintaksa Python statička metoda:  

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

Metoda klase vs statička metoda

Razlika između metode klase i statičke metode je:

  • Metoda klase uzima cls kao prvi parametar dok statička metoda ne treba posebne parametre.
  • Metoda klase može pristupiti stanju klase ili ga modificirati, dok mu statična metoda ne može pristupiti niti ga modificirati.
  • Općenito statičke metode ne znaju ništa o stanju klase. To su metode pomoćnog tipa koje uzimaju neke parametre i rade na tim parametrima. S druge strane metode klase moraju imati klasu kao parametar.
  • Koristimo @classmethod dekorater u pythonu za stvaranje metode klase i koristimo @staticmethod dekorater za stvaranje statičke metode u pythonu.

Kada koristiti klasnu ili statičku metodu?

  • Općenito koristimo metodu klase za stvaranje tvorničkih metoda. Tvorničke metode vraćaju objekte klase (slično konstruktoru) za različite slučajeve upotrebe.
  • Općenito koristimo statičke metode za stvaranje korisnih funkcija.

Kako definirati metodu klase i statičku metodu?

Za definiranje metode klase u pythonu koristimo dekorator @classmethod, a za definiranje statičke metode koristimo dekorator @staticmethod. 
Pogledajmo primjer kako bismo razumjeli razliku između njih dvoje. Recimo da želimo stvoriti klasu Osoba. Sada python ne podržava preopterećenje metoda poput C++ ili Java pa koristimo metode klase za stvaranje tvorničkih metoda. U donjem primjeru koristimo metodu klase za stvaranje objekta osobe iz godine rođenja.

Kao što je gore objašnjeno, koristimo statičke metode za stvaranje korisnih funkcija. U donjem primjeru koristimo statičku metodu da provjerimo je li osoba odrasla osoba ili nije. 

konstruktori u Javi

Jedan jednostavan primjer:

metoda klase:

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 

Izlaz
10

Statička 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)) 

Izlaz
30 30

Ispod je kompletna implementacija 

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

Izlaz:

21 25 True

Pomoćni prostor: O(1)

Napravi kviz