staticmethod(function)
function
- функция, которая будет статичным методом.Функция - декоратор staticmethod()
преобразует метод класса в статический метод этого класса. Статический метод не получает неявный первый аргумент self
класса.
Дополнительно смотрите материал "Что такое статический метод класса и для чего он нужен?".
Чтобы объявить статический метод, используйте эту идиому:
class C: @staticmethod def f(arg1, arg2, ...): ...
Проще говоря, декоратор @staticmethod
превращает метод, определенный внутри класса, в обычную функцию, которая не имеет доступа к экземпляру класса self
, поэтому ее можно вызывать без создания экземпляра класса. Следовательно статический метод может быть вызван либо в классе C.f()
, либо в экземпляре класса C().f()
.
Статические методы делают код более читабельным и повторно используемым поскольку не знают о состоянии текущего экземпляра класса. Также статические методы более удобны по сравнению с обычными функциями в отношении их импорта, так как нет необходимости импортировать каждую функцию отдельно. Выполняется импорт только одного класса с набором определенных в нем статических методов.
Статические методы в Python похожи на те, которые есть в Java или C++. Еще посмотрите вариант classmethod()
, который полезен для создания конструкторов альтернативных классов.
Как и все декораторы, staticmethod()
можно вызывать как обычную функцию и что-то делать с ее результатом. Это необходимо в некоторых случаях, когда вам нужна ссылка на функцию из тела класса, и вы хотите избежать автоматического преобразования в метод экземпляра. Для этих случаев используйте эту идиому:
class C: builtin_open = staticmethod(open)
Изменено в Python 3.10: статические методы теперь наследуют атрибуты метода (__module__
, __name__
, __qualname__
, __doc__
и __annotations__
), имеют новый атрибут __wrapped__
и теперь могут быть вызваны как обычные функции.