Чем отличается использование методов, объявленных как static и class, в Python?

В Python методы, объявленные как @staticmethod и @classmethod, отличаются способом доступа к данным класса и экземпляра:

Короткий ответ

Что ответить на собеседовании

В Python методы, объявленные как @staticmethod и @classmethod, отличаются способом доступа к данным класса и экземпляра:

Подробный разбор

Ответ с пояснениями

В Python методы, объявленные как @staticmethod и @classmethod, отличаются способом доступа к данным класса и экземпляра:

  • @staticmethod — это метод, который не принимает автоматически ни ссылку на экземпляр (self), ни на класс (cls). Он ведет себя как обычная функция, но находится внутри класса для логической группировки. Не может изменять состояние класса или экземпляра.
  • @classmethod — метод, который получает первым аргументом сам класс (cls), а не экземпляр. Позволяет работать с атрибутами класса, создавать альтернативные конструкторы и изменять состояние класса.

Пример:

class MyClass:
    count = 0

    @staticmethod
    def greet():
        print("Привет!")

    @classmethod
    def increment_count(cls):
        cls.count += 1

MyClass.greet()          # Выведет: Привет!
MyClass.increment_count()
print(MyClass.count)     # Выведет: 1

Таким образом, staticmethod — просто функция внутри класса, а classmethod — метод, работающий с самим классом.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее