@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(). При вызове метода из наследника в первом аргументе метод получит класс наследника.