python staticmethod, classmethod and instancemethod

python staticmethod, classmethod and instancemethod

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.