Ответ
Нет, статический метод (@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