@classmethod
Представляет функцию function
методом класса. В метод класса первым аргументом неявным образом передаётся класс. Аналогично метод экземпляра получает в первом аргументе сам экземпляр.
Параметры
Функция @classmethod
принимает один параметр:
- function — функция, которую необходимо преобразовать в метод класса.
Возвращаемое значение
Функция @classmethod
возвращает метод класса для данной функции.
Примеры
Для удобного объявления метода класса используйте @classmethod
в виде декоратора:
class MyClass:
@classmethod
def method(cls, arg):
print('%s classmethod. %d' % (cls.__name__, arg))
@classmethod
def call_original_method(cls):
cls.method(5)
def call_class_method(self):
self.method(10)
class MySubclass(MyClass):
@classmethod
def call_original_method(cls):
cls.method(6)
# Вызываем методы класса через класс.
MyClass.method(0) # MyClass classmethod. 0
MyClass.call_original_method() # MyClass classmethod. 5
MySubclass.method(0) # MySubclass classmethod. 0
MySubclass.call_original_method() # MySubclass classmethod. 6
# Вызываем методы класса через объект.
my_obj = MyClass()
my_obj.method(1) # MyClass classmethod. 1
my_obj.call_class_method() # MyClass classmethod. 10
Из примеров выше видно, что метод может вызываться как через класс MyClass.method()
, так и через экземпляр MyClass().method()
.
При вызове метода из наследника в первом аргументе метод получит класс наследника.