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:
Pythonclass 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: -
Pythonclass 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 TruePomoćni prostor: O(1)
Napravi kviz