What is @classmethod in python

GOAL

To understand what @classmethod in python is and how to use it

What is classmethod?

@classmethod is a function decorator.

class C:
    @classmethod
    def f(cls, arg1, arg2, ...):

A class method can be called either on the class (such as C.f()) or on an instance (such as C().f()). The instance is ignored except for its class. If a class method is called for a derived class, the derived class object is passed as the implied first argument.

Python document >library >fuction

Features of class methods

  • class methods can be called as the form Classname.method_name() without generate instance.
  • class methods receive ‘cls’ not ‘self’ as argument.

How to use

Functions that access the internal data of the class can be managed collectively with class itself.

class Student:
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade

    @classmethod
    def testpoint_to_grade(cls, name, testpoint):
        if testpoint > 90:
            return cls(name, 'A')
        elif testpoint > 80:
            return cls(name, 'B')
        elif testpoint > 60:
            return cls(name, 'C')
        else:
            return cls(name, 'D')

    def print_grade(self):
        print(self.grade) 

student1 = Student('Alice', 'C')
student2 = Student.testpoint_to_grade('Ben', 85)

student1.print_grade()
>> C
student2.print_grade()
>> B