Understanding Instance, Class, and Static Methods in Python
This article explains Python's instance, class, and static methods, detailing their definitions, differences, and typical use cases, and provides clear code examples—including a simple MyClass demonstration and a comprehensive Date class illustration—to help developers understand and apply each method type effectively.
Python provides three ways to define methods inside a class—instance methods, class methods, and static methods—each serving different purposes and exhibiting distinct behaviors.
Instance Method is the most common type; it requires an instance to be called, receives self as its first argument, and can access or modify instance attributes. Example:
class MyClass:
def instance_method(self):
print("This is an instance method.")Class Method is bound to the class rather than an instance. It receives the class itself as the first argument, conventionally named cls, and can manipulate class-level data but not instance state. Example:
class MyClass:
@classmethod
def class_method(cls):
print("This is a class method.")Static Method does not receive an implicit first argument; it behaves like a regular function placed inside the class namespace. It is useful for operations related to the class that do not need to access class or instance data. Example:
class MyClass:
@staticmethod
def static_method():
print("This is a static method.")A simple demonstration creates a MyClass instance and calls each of the three methods, showing how instance methods operate on object state, class methods on shared class state, and static methods perform independent tasks.
A more elaborate example defines a Date class that combines all three method types: an instance method is_workday checks if a specific date is a workday, a class method get_day_count returns how many Date objects have been created, and a static method is_valid_date validates a day‑month combination. The class also maintains a class variable day_count that is incremented in the constructor.
class Date:
day_count = 0 # class variable tracking created instances
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
Date.day_count += 1 # increment when a new instance is created
def is_workday(self):
if 1 <= self.day <= 31 and 1 <= self.month <= 12:
return True if self.day != 7 else False
return False
@classmethod
def get_day_count(cls):
return cls.day_count
@staticmethod
def is_valid_date(day, month):
return 1 <= day <= 31 and 1 <= month <= 12Creating two Date objects demonstrates the methods: both dates are reported as workdays (the example treats the 7th of any month as a non‑workday), get_day_count returns 2, and is_valid_date(31, 12) returns True, confirming the validity of the date.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
