Статический метод Python

    Команда Simple-Server
    03.06.2026
    4 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    Представим, что у нас есть класс MathUtils, который содержит статический метод для вычисления факториала:

    class MathUtils: @staticmethod def factorial(n): if n == 0: return 1 else: return n * MathUtils.factorial(n-1) print(MathUtils.factorial(5)) 120

    Получили факториал 5, то есть 120. Здесь статический метод factorial не использует никакие атрибуты экземпляра класса, а только входной аргумент n. И мы вызвали его, используя синтаксис MathUtils.factorial(n) и не создавая экземпляр класса MathUtils.

    Далее отметим, что статические методы в Python могут использоваться не только в классах, но также в модулях и пакетах. Если вы определяете функцию в модуле и не хотите, чтобы она была связана с экземпляром класса или модулем, вы можете использовать декоратор @staticmethod для объявления этой функции как статической.

    Допустим, у нас есть модуль StringUtils, содержащий статический метод для проверки, является ли строка палиндромом. Пишем такой код:

    def is_palindrome(string): return string == string[::-1]

    Здесь функция is_palindrome не связана с каким-либо экземпляром класса или объектом модуля, поэтому мы можем использовать декоратор @staticmethod для объявления ее как статической. Для этого расширим наш код таким образом:

    class StringUtils: @staticmethod def is_palindrome(string): return string == string[::-1]

    Далее введем для проверки:

    print(StringUtils.is_palindrome("топот")) True print(StringUtils.is_palindrome("топор")) False

    Всё верно, первое слово является палиндромом, поэтому интерпретатор вывел True, а второе нет, и мы получили False.

    Таким образом, мы можем вызвать метод is_palindrome через класс StringUtils, используя синтаксис StringUtils.is_palindrome(string) вместо того, чтобы импортировать функцию is_palindrome и вызывать ее напрямую.

    Еще одно важное отличие статических методов от методов экземпляров класса в Python заключается в том, что статические методы не могут изменять состояние экземпляра. Это означает, что они не могут изменять значения атрибутов, что логично, так как они не имеют доступа к экземпляру. Если вы хотите изменить состояние экземпляра класса, вам нужно использовать методы экземпляров.

    Рассмотрим еще один пример. Допустим, у нас есть класс Person, имеющий атрибут age и статический метод is_adult, проверяющий значение на соответствие возрасту совершеннолетия:

    class Person: def __init__(self, age): self.age = age @staticmethod def is_adult(age): return age >= 18

    Далее давайте создадим переменную age со значением 21, вызовем статический метод is_adult из класса Person с этим значением и сохраним его результат в переменную****is_adult, вот так:

    age = 21 is_adult = Person.is_adult(age)

    Теперь для проверки давайте введем:

    Поскольку возраст соответствует заданному в статическом методе условию, мы получили True. В примере выше статический метод is_adult принимает аргумент age, но не имеет доступа к атрибуту age экземпляра класса Person, выступая в качестве вспомогательной функции.


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны