Metody STATYCZNE

@classmethod:

class Kalkulator:
    PI = 3.14159
    
    @classmethod
    def oblicz_obwod_okregu(cls, promien):
        return 2 * cls.PI * promien

promien = 5
obwod = Kalkulator.oblicz_obwod_okregu(promien)
print("Obwód koła o promieniu", promien, "wynosi:", obwod)

W tym przykładzie oblicz_obwod_okregu jest metodą klasy Kalkulator, oznaczoną jako @classmethod. Metoda ta używa stałej klasy PI, aby obliczyć obwód okręgu na podstawie podanego promienia. Przy użyciu @classmethod metoda ma dostęp do klasy jako swojego pierwszego argumentu, co pozwala jej korzystać z atrybutów klasy.

@staticmethod:

class NarzedziaMatematyczne:
    @staticmethod
    def podnies_do_potegi(x, n):
        return x ** n

liczba = 2
wykladnik = 3
wynik = NarzedziaMatematyczne.podnies_do_potegi(liczba, wykladnik)
print(liczba, "do potęgi", wykladnik, "to:", wynik)

W tym przykładzie podnies_do_potegi jest statyczną metodą klasy NarzedziaMatematyczne, oznaczoną jako @staticmethod. Metoda ta nie ma dostępu ani do atrybutów ani do metod klasy czy instancji. Po prostu wykonuje operację podnoszenia do potęgi na podanych argumentach.

Podsumowując:

  • @classmethod jest używany, gdy chcemy tworzyć metody, które mają dostęp do klasy jako całości i mogą korzystać z jej atrybutów.
  • @staticmethod jest używany, gdy chcemy tworzyć metody, które są związane z klasą, ale nie potrzebują dostępu ani do atrybutów klasy ani do instancji.