Курс Python → Декораторы в Python

Декоратор @classmethod используется для создания методов класса, которые могут быть вызваны на уровне класса, а не на уровне экземпляра. Это означает, что метод, декорированный @classmethod, получает первым аргументом ссылку на класс, а не на экземпляр. Этот декоратор часто используется для создания альтернативных конструкторов или методов, которые работают с классом в целом, а не с конкретным экземпляром.

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

Декоратор @property используется для создания свойств объекта, которые могут быть доступны для чтения, записи или удаления, но выглядят как обычные атрибуты объекта. Это позволяет определить логику доступа к этим свойствам, например, проверку значений перед их установкой или выполнение дополнительных действий при чтении или удалении свойства.


class MyClass:
    def __init__(self, x):
        self.x = x

    @property
    def squared_x(self):
        return self.x ** 2

    @classmethod
    def class_method(cls, y):
        return f'Class method called with argument {y}'

    @staticmethod
    def static_method(z):
        return f'Static method called with argument {z}'

obj = MyClass(5)
print(obj.squared_x)
print(MyClass.class_method(10))
print(MyClass.static_method(15))

В приведенном примере мы создаем класс MyClass с использованием декораторов @property, @classmethod и @staticmethod. Метод squared_x определен как свойство только для чтения, метод class_method является методом класса, а static_method — статическим методом. Эти декорированные методы могут быть использованы для управления доступом к атрибутам объекта, выполнения дополнительной логики или создания альтернативных конструкторов.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Объединение кортежей в Python
  2. Перевод текста с Python Translator
  3. Работа со словарями
  4. Именованные аргументы в Python
  5. Деление в Python
  6. Основные функции и модули Python
  7. Очистка данных с помощью pandas
  8. Импорт модулей в Python 3.12
  9. Гибкие функции Python
  10. Бесконечная проверка в Python
  11. Метод join() для объединения элементов строки
  12. Управление виртуальными окружениями в Python
  13. Преобразование текста в речь с Python
  14. Необязательные аргументы в Python
  15. Генераторы в Python
  16. Измерение времени выполнения кода
  17. Работа с модулем bisect
  18. Присвоение и ссылки
  19. Проверка индексов коллекции
  20. Наследование в программировании
  21. Передача словаря через **kwargs
  22. Форматирование данных с pprint
  23. Оператор Walrus: правильное использование
  24. Утечки переменных цикла в Python 3.x
  25. Метод join() с набором
  26. Метод matmul для умножения матриц
  27. Сложные типы данных в Python
  28. Блок try-except-else
  29. Создание новых списков через list comprehensions
  30. Замыкания в Python
  31. Метод __complex__ в Python
  32. Получение обратного списка чисел
  33. Хранение переменных в словаре.
  34. Создание детектора плагиата
  35. PATCH-запрос с библиотекой requests
  36. Объединение списков в Python
  37. Обработка данных в Python
  38. Оформление текста в консоли с TermColor
  39. Работа с кортежами
  40. Python: Splat-оператор и splatty-splat
  41. Управление контекстом выполнения
  42. Тип данных TypeVarTuple
  43. Оператор «or» в Python
  44. Округление банкира в Python

Marketello читают маркетологи из крутых компаний