Movatterモバイル変換


[0]ホーム

URL:


Open In App
Next Article:
First Class functions in Python
Next article icon

In this article, we will cover the basicdifference between the class method vs Static method in Python andwhen to use the class method and static method in python.

What is Class Method in Python? 

The @classmethod decorator is a built-infunction decorator that is an expression that gets evaluated after your function is defined. The result of that evaluation shadows your function definition. Aclass method receives the class as an implicit first argument, just like an instance method receives the instance 

Syntax Python Class Method: 

class C(object):    @classmethod    def fun(cls, arg1, arg2, ...):       ....fun: function that needs to be converted into a class methodreturns: a class method for function.
  • A class method is a method that is bound to theclass 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.

What is the Static Method in Python?

Astatic method does not receive an implicit first argument. A static method is also a method that is bound to the class and not the object of the class. This 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.

Syntax Python Static Method: 

class C(object):    @staticmethod    def fun(arg1, arg2, ...):        ...returns: a static method for function fun.

Class method vs Static Method

The difference between the Class method and the static method is:

  • 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.

When to use the class or static method?

  • We generally use the 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.

How to define a class method and a static method?

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 likeC++ 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. 

One simple Example :

class method:

Python
classMyClass:def__init__(self,value):self.value=valuedefget_value(self):returnself.value# Create an instance of MyClassobj=MyClass(10)# Call the get_value method on the instanceprint(obj.get_value())# Output: 10

Output
10

Static method:-

Python
classMyClass:def__init__(self,value):self.value=value@staticmethoddefget_max_value(x,y):returnmax(x,y)# Create an instance of MyClassobj=MyClass(10)print(MyClass.get_max_value(20,30))print(obj.get_max_value(20,30))

Output
3030

Below is the complete Implementation 

Python3
# Python program to demonstrate# use of class method and static method.fromdatetimeimportdateclassPerson:def__init__(self,name,age):self.name=nameself.age=age# a class method to create a Person object by birth year.@classmethoddeffromBirthYear(cls,name,year):returncls(name,date.today().year-year)# a static method to check if a Person is adult or not.@staticmethoddefisAdult(age):returnage>18person1=Person('mayank',21)person2=Person.fromBirthYear('mayank',1996)print(person1.age)print(person2.age)# print the resultprint(Person.isAdult(22))

Output:

2125True

Auxiliary Space:O(1)


Improve
Article Tags :
Practice Tags :

Similar Reads

We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood ourCookie Policy &Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences

[8]ページ先頭

©2009-2025 Movatter.jp