Class method vs Static method in Python - GeeksforGeeks

24 Aug, 2021
The @classmethod decorator is a built-in function decorator that is an expression that gets evaluated after your function is defined. The result of that evaluation shadows your function definition. A class method receives the class as an implicit first argument, just like an instance method receives the instance Syntax: 
class C(object):
    @classmethod
    def fun(cls, arg1, arg2, ...):
       ....
fun: function that needs to be converted into a class method
returns: a class method for function.
A class method is a method that is bound to the class and not the object of the class.
They have the access to the state of the class as it takes a class parameter that points to the class and not the object instance.
It can modify a class state that would apply across all the instances of the class. For example, it can modify a class variable that will be applicable to all the instances. 
A static method does not receive an implicit first argument. 
Syntax: 
class C(object):
    @staticmethod
    def fun(arg1, arg2, ...):
        ...
returns: a static method for function fun.
A static method is also a method that is bound to the class and not the object of the class.
A static method can’t access or modify the class state.
It is present in a class because it makes sense for the method to be present in class.
A class method takes cls as the first parameter while a static method needs no specific parameters.
A class method can access or modify the class state while a static method can’t access or modify it.
In general, static methods know nothing about the class state. They are utility-type methods that take some parameters and work upon those parameters. On the other hand class methods must have class as a parameter.
We use @classmethod decorator in python to create a class method and we use @staticmethod decorator to create a static method in python.
We generally use class method to create factory methods. Factory methods return class objects ( similar to a constructor ) for different use cases.
We generally use static methods to create utility functions.
To define a class method in python, we use @classmethod decorator, and to define a static method we use @staticmethod decorator. Let us look at an example to understand the difference between both of them. Let us say we want to create a class Person. Now, python doesn’t support method overloading like C++ or Java so we use class methods to create factory methods. In the below example we use a class method to create a person object from birth year.As explained above we use static methods to create utility functions. In the below example we use a static method to check if a person is an adult or not.  
Implementation 
Python3
# Python program to demonstrate# use of 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)          # a static method to check if a Person is adult or not.    @staticmethod    def isAdult(age):        return age > 18  person1 = Person('mayank', 21)person2 = Person.fromBirthYear('mayank', 1996)  print (person1.age)print (person2.age)  # print the resultprint (Person.isAdult(22))
Output:
21
25
True
This article is contributed by Mayank Agrawal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
ddeevviissaavviittaa
ankitsinghasp23
Difference Between
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Difference between BFS and DFS
Difference between var, let and const keywords in JavaScript
Differences between TCP and UDP
Difference between Process and Thread
Difference Between == and .equals() Method in Java
Read JSON file using Python
Adding new column to existing DataFrame in Pandas
Python map() function
How to get column names in Pandas dataframe
Read a file line by line in Python