Метод класса в Python: объяснение classmethod()

Python — это язык ООП. Итак, мы увидим, как мы можем определять и использовать методы класса. И как мы можем создавать методы класса и вызывать их в нашей программе.

Руководство по Python classmethod()

Что такое функция classmethod() в Python?

Функция classmethod() в Python — это встроенная функция, которая возвращает метод класса для данной функции. Это способ определить функцию класса Python.

Метод класса — это метод, привязанный к классу, а не к объекту класса.

У них есть доступ к состоянию класса, поскольку он принимает параметр класса, указывающий на класс, а не на экземпляр объекта. Он может изменить состояние класса, которое будет применяться ко всем экземплярам класса.

Например, он может изменить переменную класса, которая будет применяться ко всем экземплярам. В Python есть два типа функций, которые можно создать в программе.

  1. Статические методы
  2. Методы класса

Создание методов класса Python

В Python есть два способа создания методов класса:

  1. Использование classmethod(function)
  2. Использование аннотации @classmethod

Использование декоратора @classmethod

Декоратор @classmethod — это встроенный декоратор функции, представляющий собой выражение, которое оценивается после определения вашей функции.

Результат оценки затмевает определение вашей функции.

См. следующий синтаксис.

Использование classmethod(function)

Синтаксис

Параметры classmethod() 

Метод classmethod() принимает единственный параметр:

  1. function — это функция, которую необходимо преобразовать в метод класса.

Метод classmethod() возвращает метод класса для данной функции.

Что такое метод класса?

Метод класса — это метод, привязанный к классу, а не к его объекту. Он не требует создания экземпляра класса, как статический метод.

Метод класса может быть вызван как классом, так и его объектом.

Применение classmethod()

Теперь посмотрите на следующий пример кода.

Вывод:

Здесь у нас есть приложение класса с ценой переменной-члена, присвоенной 15.

У нас также есть функция printPrice(), которая принимает единственный параметр cls, а не self, как мы обычно принимаем.

cls принимает приложение класса в качестве параметра, а не объект/экземпляр приложения.

Теперь мы передаем метод App.printPrice() в качестве аргумента методу класса функции. Он преобразует метод в метод класса, чтобы он принимал первый параметр как класс(т. е. приложение).

В последней строке мы вызываем printPrice() без создания объекта App, как это делается для статических методов. Это печатает переменную цену класса.

Почему мы используем classmethod

  1. Обычно мы используем метод класса для создания фабричных методов. Фабричные методы возвращают объект класса(подобный конструктору) для различных вариантов использования.
  2. Мы используем статические методы для создания служебных функций.

Как определить метод класса и статический метод

Если мы хотим определить метод класса в python, мы используем декоратор @classmethod, а для определения статического метода мы используем декоратор @staticmethod.

Метод класса и статический метода — сравнение

  1. Метод класса принимает cls в качестве первого параметра, в то время как статический метод не нуждается в определенных параметрах.
  2. Метод класса может получить доступ к состоянию класса или изменить его, в то время как статический метод не может получить к нему доступ или изменить его.
  3. Как правило, статические методы ничего не знают о состоянии класса. Статические методы — это методы служебного типа, которые принимают некоторые параметры и работают с этими параметрами. С другой стороны, методы класса должны иметь класс в качестве параметра.
  4. Мы используем декоратор @classmethod в python для создания метода класса, и декоратор @staticmethod для создания статического метода в python.

Вывод

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

Если мы используем декоратор, можно создать столько же конструкторов для класса, который ведет себя как фабричные конструкторы.

Оцените статью

Автор статей и разработчик, делюсь знаниями.

Программирование на Python