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

- Что такое функция classmethod() в Python?
- Создание методов класса Python
- Использование декоратора @classmethod
- Использование classmethod( function)
- Синтаксис
- Параметры classmethod()
- Что такое метод класса?
- Применение classmethod()
- Почему мы используем classmethod
- Как определить метод класса и статический метод
- Метод класса и статический метода — сравнение
- Вывод
Что такое функция classmethod() в Python?
Функция classmethod() в Python — это встроенная функция, которая возвращает метод класса для данной функции. Это способ определить функцию класса Python.
Метод класса — это метод, привязанный к классу, а не к объекту класса.
У них есть доступ к состоянию класса, поскольку он принимает параметр класса, указывающий на класс, а не на экземпляр объекта. Он может изменить состояние класса, которое будет применяться ко всем экземплярам класса.
Например, он может изменить переменную класса, которая будет применяться ко всем экземплярам. В Python есть два типа функций, которые можно создать в программе.
- Статические методы
- Методы класса
Создание методов класса Python
В Python есть два способа создания методов класса:
- Использование classmethod(function)
- Использование аннотации @classmethod
Использование декоратора @classmethod
Декоратор @classmethod — это встроенный декоратор функции, представляющий собой выражение, которое оценивается после определения вашей функции.
Результат оценки затмевает определение вашей функции.
См. следующий синтаксис.
|
1 2 3 4 5 6 |
class C(object): @classmethod def fun(cls, arg1, arg2, ...): .... fun: function that needs to be converted into a class method returns: a class method for function. |
Использование classmethod(function)
Синтаксис
|
1 |
classmethod(function) |
Параметры classmethod()
Метод classmethod() принимает единственный параметр:
- function — это функция, которую необходимо преобразовать в метод класса.
Метод classmethod() возвращает метод класса для данной функции.
Что такое метод класса?
Метод класса — это метод, привязанный к классу, а не к его объекту. Он не требует создания экземпляра класса, как статический метод.
Метод класса может быть вызван как классом, так и его объектом.
|
1 2 3 |
Class.classmethod() Or even Class().classmethod() |
Применение classmethod()
Теперь посмотрите на следующий пример кода.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# app.py class App: price = 25 def printPrice(cls): print('The price is:', cls.price) # create printPrice class method App.printPrice = classmethod(App.printPrice) App().printPrice() |
Вывод:
|
1 2 3 |
➜ pyt python3 app.py The price is: 15 ➜ pyt |
Здесь у нас есть приложение класса с ценой переменной-члена, присвоенной 15.
У нас также есть функция printPrice(), которая принимает единственный параметр cls, а не self, как мы обычно принимаем.
cls принимает приложение класса в качестве параметра, а не объект/экземпляр приложения.
Теперь мы передаем метод App.printPrice() в качестве аргумента методу класса функции. Он преобразует метод в метод класса, чтобы он принимал первый параметр как класс(т. е. приложение).
В последней строке мы вызываем printPrice() без создания объекта App, как это делается для статических методов. Это печатает переменную цену класса.
Почему мы используем classmethod
- Обычно мы используем метод класса для создания фабричных методов. Фабричные методы возвращают объект класса(подобный конструктору) для различных вариантов использования.
- Мы используем статические методы для создания служебных функций.
Как определить метод класса и статический метод
Если мы хотим определить метод класса в python, мы используем декоратор @classmethod, а для определения статического метода мы используем декоратор @staticmethod.
Метод класса и статический метода — сравнение
- Метод класса принимает cls в качестве первого параметра, в то время как статический метод не нуждается в определенных параметрах.
- Метод класса может получить доступ к состоянию класса или изменить его, в то время как статический метод не может получить к нему доступ или изменить его.
- Как правило, статические методы ничего не знают о состоянии класса. Статические методы — это методы служебного типа, которые принимают некоторые параметры и работают с этими параметрами. С другой стороны, методы класса должны иметь класс в качестве параметра.
- Мы используем декоратор @classmethod в python для создания метода класса, и декоратор @staticmethod для создания статического метода в python.
Вывод
Декоратор аннотации @classmethod используется для создания фабричных методов, поскольку они могут принимать любые входные данные и предоставлять объект класса на основе параметров и обработки.
Если мы используем декоратор, можно создать столько же конструкторов для класса, который ведет себя как фабричные конструкторы.
