Static Methods in Python

In Python, a staticmethod is a method inside a class that does not operate on an instance or class variable. Unlike instance methods, static methods do not require an instance of the class to be called. They are primarily used when a method logically belongs to a class but does not need to modify or access instance attributes.

Syntax

</>
Copy
class ClassName:
    @staticmethod
    def method_name(parameters):
        # Method body

Key Features

FeatureDescription
No Self ParameterStatic methods do not receive the instance (self) as their first parameter.
Does Not Modify Class or InstanceThey do not change or access class or instance attributes.
Called on Class or InstanceThey can be called using either the class name or an instance.
Defined Using @staticmethodThey are decorated with @staticmethod to indicate they belong to the class but do not interact with instance attributes.

Examples

1. Creating a Simple Static Method

Let’s create a static method inside a class and call it.

Here, we define a class MathOperations with a static method add_numbers() that takes two numbers and returns their sum. Since the method does not interact with any instance variables, we use the @staticmethod decorator.

</>
Copy
class MathOperations:
    @staticmethod
    def add_numbers(a, b):
        return a + b

# Calling static method using the class name
result = MathOperations.add_numbers(5, 3)
print("Sum:", result)

Output:

Sum: 8

The method add_numbers() performs a simple addition of two numbers and returns the result. We call it directly using the class name MathOperations.add_numbers() since it does not require an instance.

2. Calling a Static Method Using an Instance

Static methods can also be called using an instance of the class.

Here, we create an instance of MathOperations and call the add_numbers() method using the instance instead of the class name.

</>
Copy
class MathOperations:
    @staticmethod
    def add_numbers(a, b):
        return a + b

# Creating an instance
math_instance = MathOperations()

# Calling the static method using the instance
result = math_instance.add_numbers(10, 4)
print("Sum:", result)

Output:

Sum: 14

Even though we used an instance math_instance to call the method, it still behaves like a static method and does not access any instance variables.

3. Using Static Methods for Utility Functions

Static methods are often used for utility functions that perform independent operations.

Here, we define a class Utility that contains a static method is_even() to check if a number is even. Since this function does not depend on the class state, we define it as a static method.

</>
Copy
class Utility:
    @staticmethod
    def is_even(number):
        return number % 2 == 0

# Using the static method
print("Is 10 even?", Utility.is_even(10))
print("Is 7 even?", Utility.is_even(7))

Output:

Is 10 even? True
Is 7 even? False

The is_even() method checks whether a number is even and returns True or False. It is called directly on the class without needing an instance.

4. Error When Accessing Instance Variables

Since static methods do not have access to instance attributes, trying to access self inside a static method results in an error.

</>
Copy
class Example:
    def __init__(self, value):
        self.value = value

    @staticmethod
    def show_value():
        print(self.value)  # This will cause an error

# Creating an instance
ex = Example(5)

# Attempting to call the static method
try:
    ex.show_value()
except NameError as e:
    print("Error:", e)

Output:

Error: name 'self' is not defined

The error occurs because self is not accessible in a static method. To fix this, we should use an instance method instead.

5. When to Use Static Methods

Static methods are useful when:

  1. You need a method that does not rely on instance variables.
  2. You are writing utility functions that logically belong to a class.
  3. You want to prevent modifying instance state accidentally.

For example, if you are writing a class for a calculator, functions like addition and multiplication do not need instance attributes and can be static methods.