Python classmethod decorator: @classmethod

The class method decorator, or @classmethod, is used to define methods inside a class as class methods. For example:

class fresherearth:
    @classmethod
    def classfun(cls, x):
        print("The first parameter (cls):", cls)
        print("The second parameter (x):", x)

fresherearth.classfun("Hey!")

Here is the output produced by the above Python program, demonstrating the @classmethod decorator:

The first parameter (cls): <class '__main__.fresherearth'>
The second parameter (x): Hey!

The class methods have a reference to the class object as their first argument.

Class methods have access to what the class is. The class method is also a function, but with access to the object and its internals like fields and other methods, whereas static methods don't. The differentiation between these two is provided in class methods versus static methods in Python.

The class methods can be called either directly or using:

ClassName.ClassMethodName()

Or by using an object of the class, in this way:

ob = ClassName()
ob.ClassMethodName()

where ob is a variable that refers to the object of the class ClassName.

In the above example program, using the following statement:

fresherearth.classfun("Hey!")

the class "fresherearth" gets implicitly passed as the first parameter of the class method named classfun(), whereas "Hey!" will get passed as the second parameter of the class method named classfun(). That is, the "cls" parameter (the first parameter) while defining class methods using the @classmethod decorator refers to the class itself.

Python @classmethod decorator syntax

The syntax of the @classmethod decorator in Python is:

@classmethod
def myfun(cls, arg1, arg2, arg3, ..., argN):
    # definition code goes here

Just like "self," the first parameter of the normal method inside a class refers to the object instance. In the case of class methods too, the first parameter of the class method, that is, "cls" inside a class, refers to the class itself. And the rest of all the parameters, like arg1, arg2, and so on, refer to the arguments that normal functions have.

Python @classmethod decorator example

Here is an example of the @classmethod decorator in Python:

class fresherearth:
    @classmethod
    def myfun(cls, x, y, z, str):
        print("The value of x:", x)
        print("The value of y:", y)
        print("The value of z:", z)
        print("The value of str:", str)

fresherearth.myfun(100, 200, 300, "fresherearth")

The snapshot given below shows the sample output produced by the above Python program, demonstrating the @classmethod decorator:

python classmethod decorator

Python Online Test


« Previous Tutorial Next Tutorial »