Sobes.tech
Junior
177

Jak zaimplementować metody statyczne w Pythonie?

Odpowiedź od AI

sobes.tech AI

Metoda statyczna nie jest powiązana z instancją klasy ani z samą klasą. Zachowuje się jak zwykła funkcja, ale znajduje się w przestrzeni nazw klasy.

Implementuje się ją za pomocą dekoratora @staticmethod.

class MyClass:
    def __init__(self, value):
        self.value = value

    def instance_method(self):
        # Metoda instancji ma dostęp do self
        print(f"Metoda instancji: {self.value}")

    @classmethod
    def class_method(cls):
        # Metoda klasy ma dostęp do klasy przez cls
        print(f"Metoda klasy: {cls.__name__}")

    @staticmethod
    def static_method(x, y):
        # Metoda statyczna nie przyjmuje argumentu domyślnego (self lub cls)
        print(f"Metoda statyczna: {x + y}")

# Wywołanie metody statycznej
MyClass.static_method(5, 10)

# Można też wywołać przez instancję, ale nie jest to zalecane
obj = MyClass(20)
obj.static_method(1, 2)

Główne cechy:

  • Nie przyjmuje domyślnego pierwszego argumentu (self lub cls).
  • Nie ma dostępu do atrybutów instancji ani klasy.
  • Znajduje się w przestrzeni nazw klasy dla grupowania logicznego.
  • Może być wywoływana zarówno przez klasę, jak i przez instancję (choć wywołanie przez klasę jest preferowane).

Głównym celem są funkcje pomocnicze powiązane z klasą, ale niezależne od stanu konkretnej instancji lub samej klasy (np. funkcje pomocnicze, walidatory, generatory, które logicznie należą do klasy).