@staticmethod
преобразует метод класса в статичный метод. Статичные методы не принимают в качестве первого аргумента ни экземпляр класса (как обычные методы), ни сам класс (как методы класса). Они работают как обычные функции, но при этом определены внутри класса и логически с ним связаны. Их можно вызывать как через экземпляр класса, так и напрямую через класс.
Декоратор @staticmethod
в Python используется для определения статического метода в классе. Статический метод отличается от обычного метода класса (который автоматически получает ссылку на экземпляр класса как первый аргумент, обычно называемый self
) и метода класса (который автоматически получает ссылку на класс как первый аргумент, обычно называемый cls
) тем, что он не получает никакой неявной ссылки ни на экземпляр класса, ни на сам класс.
Ключевые особенности и назначение:
self
или cls
: Статический метод определяется без параметров self
или cls
. Он ведет себя как обычная функция, объявленная внутри класса.Пример:
class MyClass:
@staticmethod
def my_static_method(x, y):
return x + y
# Вызов статического метода:
result = MyClass.my_static_method(5, 3)
print(result) # Выведет: 8
# Также можно вызвать из экземпляра класса, но это не рекомендуется, так как это сбивает с толку.
instance = MyClass()
result = instance.my_static_method(5,3)
print(result) # Выведет: 8
Когда использовать:
Отличие от обычного метода класса:
Основное отличие заключается в том, что обычный метод класса автоматически получает ссылку на экземпляр класса (self
), а статический метод - нет. Обычный метод класса предназначен для работы с состоянием экземпляра, в то время как статический метод предназначен для выполнения операций, которые не зависят от состояния экземпляра.
Отличие от метода класса (@classmethod
):
Метод класса (декорированный @classmethod
) получает ссылку на сам класс (cls
) в качестве первого аргумента. Он может использоваться для изменения состояния класса или создания новых экземпляров класса. Статический метод, напротив, не получает никакой ссылки ни на экземпляр, ни на класс.