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ą.