Example of classmethod in Python
Create a simple classmethod
In this example, we are going to see how to create a class method in Python. For this, we created a class named “Geeks” with a member variable “course” and created a function named “purchase” which prints the object. Now, we passed the method Geeks.purchase
into a class method using the @classmethod
decorator, which converts the method to a class method. With the class method in place, we can call the function “purchase” without creating a function object, directly using the class name “Geeks.”
Python3
class geeks: course = 'DSA' def purchase(obj): print ( "Purchase course : " , obj.course) geeks.purchase = classmethod (geeks.purchase) geeks.purchase() |
Purchase course : DSA
Create class method using classmethod()
Created print_name classmethod before creating this line print_name() It can be called only with an object not with the class now this method can be called as classmethod print_name() method is called a class method.
Python3
class Student: # create a variable name = "w3wiki" # create a function def print_name(obj): print ( "The name is : " , obj.name) # create print_name classmethod # before creating this line print_name() # It can be called only with object not with class Student.print_name = classmethod (Student.print_name) # now this method can be called as classmethod # print_name() method is called a class method Student.print_name() |
The name is : w3wiki
Factory method using a Class method
Uses of classmethod() function are used in factory design patterns where we want to call many functions with the class name rather than an object.
Python3
# Python program to demonstrate # use of a class method and static method. from datetime import date class Person: def __init__( self , name, age): self .name = name self .age = age # a class method to create a # Person object by birth year. @classmethod def fromBirthYear( cls , name, year): return cls (name, date.today().year - year) def display( self ): print ( "Name : " , self .name, "Age : " , self .age) person = Person( 'mayank' , 21 ) person.display() |
Name : mayank Age : 21
How the class method works for the inheritance?
In this example, we are making Python class hierarchy with two classes, Person
and Man
, and demonstrates the usage of class methods and inheritance.
Python3
from datetime import date # random Person class Person: def __init__( self , name, age): self .name = name self .age = age @staticmethod def from_FathersAge(name, fatherAge, fatherPersonAgeDiff): return Person(name, date.today().year - fatherAge + fatherPersonAgeDiff) @classmethod def from_BirthYear( cls , name, birthYear): return cls (name, date.today().year - birthYear) def display( self ): print ( self .name + "'s age is: " + str ( self .age)) class Man(Person): sex = 'Female' man = Man.from_BirthYear( 'John' , 1985 ) print ( isinstance (man, Man)) man1 = Man.from_FathersAge( 'John' , 1965 , 20 ) print ( isinstance (man1, Man)) |
True False
classmethod() in Python
The classmethod() is an inbuilt function in Python, which returns a class method for a given function.