Курс 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. Поиск подстроки в строке
  3. Метод join() для объединения элементов
  4. Нахождение разницы между списками в Python
  5. Мониторинг памяти с Pympler
  6. Вывод переменной и строки в Python
  7. Сохранение Unicode в JSON
  8. Обезопасьте ввод данных
  9. Работа с часовыми поясами в Python.
  10. Генерация случайных данных в NumPy
  11. Функции с необязательными аргументами
  12. Замена символов в строке
  13. Определение относительного пути
  14. Структура данных словарь в Python
  15. Списки в Python: основы
  16. Модуль os: работа с файлами и папками
  17. Генераторы списков в Python
  18. Загрузка постов Instagram
  19. Сортировка и обратный порядок
  20. Применение функции map() с лямбда-функциями
  21. Вывод с переменной через запятую
  22. Эффективная конкатенация строк с использованием join()
  23. Сортировка HTML по CSS-селектору
  24. Enum в Python
  25. Перебор элементов списка в Python
  26. Работа с Enum в Python3.
  27. Метод join() для объединения строк
  28. Создание функций с произвольным количеством аргументов
  29. Прокачанный трейсинг ошибок
  30. Возврат нескольких значений
  31. Особенности запятых в Python
  32. Метод difference_update() — разность множеств
  33. Метод __imod__ для Python
  34. Метод eq для сравнения объектов
  35. Метод append() для списка
  36. Оператор in в Python
  37. Создание спинбокса в tkinter
  38. Отладка кода
  39. Обработка исключений
  40. Функции all() и any() в Python
  41. Оптимизация параметров в Python
  42. Генераторы в Python
  43. Отладка в Python
  44. TypedDict для kwargs в Python 3.12
  45. Функция reduce() из модуля functools
  46. Измерение времени выполнения кода

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