Статические методы в Python невероятно похожи на class-level методы Python, разница в том, что статический метод привязан к классу, а не к объектам этого класса.
Что такое функция staticmethod() в Python?
Python staticmethod() — это встроенная функция, которая возвращает статический метод для заданной функции. Этот метод похож на метод уровня класса Python, но разница в том, что этот метод привязан только к классу, а не к объектам класса. Следовательно, мы не можем изменить какой-либо объект класса с помощью функции staticmethod(), поскольку объекты не привязаны к ней.
Это означает, что статический метод может быть вызван без объекта для этого класса. Это также означает, что статические методы не могут изменять состояние объекта, поскольку они не привязаны к нему.
Давайте посмотрим, как мы можем создавать статические методы в Python, используя staticmethod() и @staticmethod.
Синтаксис
|
1 |
staticmethod(function) |
Аргументы
Аргумент функции — это function, присутствующая внутри класса, и ее необходимо преобразовать.
Однако приведенный выше метод является не-Pythonic способом создания статического метода; более новый способ:
|
1 2 |
@staticmethod def func(args, ...) |
Здесь мы использовали @staticmethod.
Статический метод возвращает статический метод данной функции.
Создание статических методов Python
Статические методы Python можно создавать двумя способами. Давайте посмотрим первый метод.
Использование staticmethod()
Давайте посмотрим, как использовать подход staticmethod().
|
1 2 3 4 5 6 7 8 9 10 |
# app.py class Mul: def calculate(x, y): return x * y # create addNumbers static method Mul.calculate = staticmethod(Mul.calculate) print('Product:', Mul.calculate(11, 21)) |
Выход:
|
1 2 3 |
➜ pyt python3 app.py Product: 231 ➜ pyt |
Следует отметить, что мы вызвали созданный нами метод mul без объекта.
Никаких неожиданностей там не было. Этот подход контролируется в каждом месте, и можно создать статический метод из метода класса. Давайте рассмотрим другой подход на том же примере здесь.
См. другой пример.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# app.py # Defining a class named Sum class Sum: # defining a function sumoftwo # this function will be called in a static method def sumoftwo(a, b): return a+b # Creating Static Method Sum.sumoftwo = staticmethod(Sum.sumoftwo) # Printing values by passing arguments print("Sum of two numbers are: ", Sum.sumoftwo(10, 20)) |
Выход:
|
1 2 3 |
➜ pyt python3 app.py Sum of two numbers is: 30 ➜ pyt |
В этом примере мы сначала создали класс с именем «Sum», а затем создали функцию внутри класса с именем «sumoftwo».
Мы создали статический метод вне класса, вызвав эту функцию, а затем напечатали его.
Использование @staticmethod
Это более тонкий способ создания статического метода, поскольку нам не нужно полагаться на определение инструкции метода, являющегося методом класса, и делать его статическим в каждом месте, где вы делаете его статическим.
См. следующий пример.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# app.py # Defining a class named Sum class Sum: # defining a function sumoftwo # this function will be called in a static method # Creating static method here only @staticmethod def sumoftwo(a, b): return a+b # Printing values by passing agruments print("Sum of two numbers are: ", Sum.sumoftwo(10, 20)) |
Выход:
|
1 2 3 |
➜ pyt python3 app.py Sum of two numbers are: 30 ➜ pyt |
В этом примере мы создали класс, но когда мы создаем функцию внутри класса, мы объявляем ее как статический метод, а затем вне класса мы передаем значения и печатаем желаемый результат.
Преимущества статических методов в Python
Статические методы имеют очевидный вариант использования. Когда нам нужна какая-то функциональность, не относящаяся к объекту, а относящаяся ко всему классу, мы делаем метод статическим. Это выгодно, когда нам нужно создать служебные методы, поскольку они не привязаны к жизненному циклу объекта.
Наконец, обратите внимание, что нам не нужно, чтобы self передавалось в качестве первого аргумента статического метода.
