Skip to content

Latest commit

 

History

History
77 lines (59 loc) · 2.71 KB

File metadata and controls

77 lines (59 loc) · 2.71 KB

Extending Python Build-in

Python: Extending buil-in Classes
Geeks4Geeks: Class method vs Static method in Python

Class Method

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.

# static method
class xclass(object):
    
    @classmethod
    def func(cls, **args, **kwargs):
        ...
  • 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.

Static Method

class xsclass(object):
    
    @staticmethod
    def func(arg1, arg2, ...):
        ...

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.
# 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('John', 21)
person2 = Person.fromBirthYear('Jean', 1996)

print(person1.age)
print(person2.age)
print(Person.isAdult(22))

Output:

21
25
True

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