> В чем разница между методами экземпляра, класса и статическими методами в Python (Python)

Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы

Компании: ООО Диджитал Сектор Поддержка, ООО Бергманн Инфотех Групп Ост, Сбер, Т1, Московский метрополитен

Стек: Python

> Пример ответа

Основное различие - в первом аргументе, который Python автоматически передаёт при вызове метода, и в доступе к атрибутам объекта или класса.

Метод экземпляра - самый распространённый. Первым аргументом принимает self - ссылку на конкретный объект. Может читать и изменять атрибуты экземпляра, а также обращаться к атрибутам класса через self.__class__.

PYTHON
class MyClass:
def instance_method(self):
return self # ссылка на экземпляр

Метод класса - декорируется @classmethod. Первым аргументом принимает cls - ссылку на сам класс, а не на экземпляр. Не может напрямую изменять состояние конкретного объекта, но может изменять состояние класса (например, атрибуты класса). Часто используется для альтернативных конструкторов.

PYTHON
class MyClass:
@classmethod
def class_method(cls):
return cls # ссылка на класс

Статический метод - декорируется @staticmethod. Не принимает ни self, ни cls автоматически. Это, по сути, обычная функция внутри пространства имён класса. Не имеет доступа к атрибутам экземпляра или класса (если только не передать их явно). Используется для логически связанных с классом функций, которым не нужен доступ к его состоянию.

PYTHON
class MyClass:
@staticmethod
def static_method():
return "статический метод"

Ключевое отличие в наследовании:

  • Метод экземпляра и статический метод ведут себя как обычные функции - при вызове через подкласс они не знают о подклассе.
  • Метод класса при вызове через подкласс получает cls как подкласс, что позволяет реализовать полиморфизм на уровне класса (например, фабричные методы).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью