Принимает ли @staticmethod в Python обязательные аргументы, такие как self или cls

«Принимает ли @staticmethod в Python обязательные аргументы, такие как self или cls» — вопрос из категории ООП, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, статический метод (@staticmethod) не принимает в качестве первого аргумента ни экземпляр класса (self), ни сам класс (cls). Он ведёт себя как обычная функция, которая логически сгруппирована внутри класса, но не имеет доступа к его состоянию.

Это делает его идеальным для утилитарных функций, связанных с классом, но не зависящих от конкретного экземпляра или данных класса.

Сравнение сигнатур:

  • Instance Method: def my_method(self, arg1, ...)
  • Class Method: def my_classmethod(cls, arg1, ...)
  • Static Method: def my_staticmethod(arg1, ...)

Пример:

class MathHelper:
    PI = 3.14159

    def __init__(self, radius):
        self.radius = radius

    # Метод экземпляра - работает с данными объекта (self.radius)
    def area(self):
        return self.PI * (self.radius ** 2)

    # Статический метод - утилитарная функция, не нужна информация о классе или объекте
    @staticmethod
    def add(x, y):
        return x + y

# Вызов статического метода без создания экземпляра класса
sum_result = MathHelper.add(5, 10)
print(f"Сумма: {sum_result}") # Вывод: Сумма: 15

# Для вызова метода экземпляра нужен объект
circle = MathHelper(10)
print(f"Площадь: {circle.area()}") # Вывод: Площадь: 314.159