Sobes.tech
Junior — Middle

Czym różni się użycie metod zadeklarowanych jako static i class w Pythonie?

sobes.tech AI

Odpowiedź od AI

W Pythonie metody oznaczone jako @staticmethod i @classmethod różnią się sposobem dostępu do danych klasy i instancji:

  • @staticmethod — to metoda, która nie przyjmuje automatycznie odwołania ani do instancji (self), ani do klasy (cls). Zachowuje się jak zwykła funkcja, ale znajduje się w klasie dla celów logicznej grupowania. Nie może zmieniać stanu klasy ani instancji.

  • @classmethod — to metoda, która jako pierwszy argument otrzymuje samą klasę (cls), a nie instancję. Pozwala na pracę z atrybutami klasy, tworzenie alternatywnych konstruktorów i modyfikację stanu klasy.

Przykład:

class MyClass:
    count = 0

    @staticmethod
    def greet():
        print("Cześć!")

    @classmethod
    def increment_count(cls):
        cls.count += 1

MyClass.greet()          # Wyświetli: Cześć!
MyClass.increment_count()
print(MyClass.count)     # Wyświetli: 1

Zatem, staticmethod to po prostu funkcja wewnątrz klasy, a classmethod to metoda pracująca z samą klasą.