Python. Статические и классовые методы

Перевод параграфа 6.5 Static and Class Methods из книги Intermediate Python.

По умолчанию методы определённые в классе работают с экземплярами класса. Для определения статических и классовых методов применяются декораторы @staticmethod и @classmethod.

Статичные методы

Статичные методы это обычные функции внутри пространства имён класса. Ссылка на статичный метод из класса возвращает функцию вместо несвязанного метода:

Декоратор @staticmethod используется для определения статического метода. Такой метод не требует аргумента self.

Статичные методы предоставляют механизм для организации кода. Метод связывается с классом и может быть переопределён в потомках.

В отличии от обычных методов, являющихся обёртками над функциями, статичные методы возвращают функцию без изменений.

Классовые методы

Классовые методы работают с классами вместо экземпляров классов. Классовый метод создаётся декоратором @classmethod. В первый аргумент такого метода передаётся ссылка на класс вместо экземпляра объекта:

Пример использования классовых методов — фабрики для создания объектов. Представьте что данные для класса Account приходят в различных форматах: кортежи, JSON, строки. Возможности определить несколько методов __init__ нет, поэтому классовые методы удобны для этой ситуации. Приведённый выше класс Account инициализируется строкой с JSON, для этого мы определили классовый метод from_json который принимает строку, извлекает параметры из JSON и создаёт объект используя извлечённые параметры.

Другой пример классового метода — dict.fromkeys. Этот метод создаёт словарь из последовательности ключей и значений.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *