python staticmethod, classmethod and instancemethod


python staticmethod, classmethod and instancemethod

We have three types of class based methods in python. They are 1.static method, 2.class method and 3.instance method. When we are working with classes we will have to deal with different types of scenarios. Based on the scenario we have to use the one of the method types. Let's get started with these python methods.

Python Static Methods

In python classes we define static methods using the decorator @staticmethod . Let's check out the python static method syntax below.

class Circle(object):
    @staticmethod
    def area(radius):
        return (22/7.0)*radius*radius
area = Circle.area(10)
print(area)
# Output: 314.285714286
  • We can define the static method without using decorator also but it will not be available on class instances.
  • We can use static methods when the code of the method only belongs to the class and it do not require the self or the object itself.
  • staticmethod is nothing more than a function defined inside a class.
  • It is callable without instantiating the class first. It’s definition is immutable via inheritance.

Python Class Methods

In python classes we define class methods using the decorator @classmethod. Let's check out the python class method syntax below.

class Date(object):

    def __init__(self, day=0, month=0, year=0):
        self.day = day
        self.month = month
        self.year = year

    @classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        date = cls(day, month, year)
        return date

    def __str__(self):
        return 'Date({}, {}, {})'.format(self.day, self.month, self.year)

d = Date.from_string('01-12-2019')
print(d)
# Output: Date(1, 12, 2019)
  • Python class methods are not specific to a particular instance but they involved with the class.
  • Python class methods can be overridden by its child classes.
  • classmethod decorator also improves the code readability.

Python Instance Methods

Unike the static and class methods,  python instance methods does not require any decorator. Let's check out the python instance method syntax below.

class User(object):

    def __init__(self, user_id, first_name, last_name):
        self.user_id = user_id
        self.first_name = first_name
        self.last_name = last_name

    def get_full_name(self):
        return '{} {}'.format(self.first_name, self.last_name)

u1 = User(1, 'Anji', 'B')
print(u1.get_full_name())
# Output: Anji B
u2 = User(2, 'Shiva', 'D')
print(u2.get_full_name())
# Output: Shiva D
  • "Python instance method" the name itself says that it only works with the instance of the class.
  • instance method always considers the first parameter as class instance.  By default we use first parameter as "self" to instance methods.
  • Python instance methods can be overridden by it's child classes.

Please let us know your thoughts in below comments.