What is the difference between @staticmethod and @classmethod in Python?

Free Coding Questions Catalog
Boost your coding skills with our essential coding questions catalog. Take a step towards a better tech career now!

Difference Between @staticmethod and @classmethod in Python

Understanding the nuances between @staticmethod and @classmethod in Python can enhance your coding efficiency and design. Let’s break down these decorators to see how they differ and when to use each.

What Are @staticmethod and @classmethod

@staticmethod

A @staticmethod is a method that belongs to a class but does not access or modify the class or instance it belongs to. It behaves like a regular function but resides within the class's namespace.

Example:

class MathUtility: @staticmethod def add(a, b): return a + b # Usage result = MathUtility.add(5, 3) print(result) # Output: 8

In this example, add does not interact with the MathUtility class or its instances. It simply performs a calculation.

@classmethod

A @classmethod is a method that belongs to the class itself rather than an instance of the class. It receives the class (cls) as its first argument and can access or modify class state that applies across all instances.

Example:

class Person: species = "Human" def __init__(self, name): self.name = name @classmethod def change_species(cls, new_species): cls.species = new_species # Usage Person.change_species("Homo sapiens") print(Person.species) # Output: Homo sapiens

Here, change_species modifies the class variable species, affecting all instances of the Person class.

Key Differences

Access to Class and Instance

  • @staticmethod: Does not have access to the class (cls) or instance (self). It cannot modify class or instance state.
  • @classmethod: Has access to the class (cls) and can modify class state that applies across all instances.

Use Cases

  • @staticmethod: Use when you need a utility function that performs a task related to the class but doesn’t need to access class or instance data.

    Example: A helper method for calculations or data formatting.

  • @classmethod: Use when you need to access or modify class state, create alternative constructors, or when the method needs to know which class it is operating on, especially in inheritance scenarios.

    Example: Creating instances in different ways or modifying class-level attributes.

Practical Uses

@staticmethod

class TemperatureConverter: @staticmethod def celsius_to_fahrenheit(celsius): return (celsius * 9/5) + 32 # Usage temp_f = TemperatureConverter.celsius_to_fahrenheit(25) print(temp_f) # Output: 77.0

Use @staticmethod for straightforward conversions or calculations that don't need to interact with the class.

@classmethod

class Book: total_books = 0 def __init__(self, title): self.title = title Book.total_books += 1 @classmethod def get_total_books(cls): return cls.total_books # Usage book1 = Book("Python 101") book2 = Book("Data Science with Python") print(Book.get_total_books()) # Output: 2

Use @classmethod to keep track of class-level data like the total number of books created.

Additional Resources

Enhance your understanding of object-oriented design and Python's advanced features with these DesignGurus.io courses:

  • Grokking the Object Oriented Design Interview here
  • Grokking the System Design Interview here

Helpful Blogs

Dive deeper into Python and object-oriented principles by visiting DesignGurus.io's blog:

By mastering the differences between @staticmethod and @classmethod, you can write more organized and efficient Python code. Happy coding!

TAGS
Coding Interview
CONTRIBUTOR
Design Gurus Team

GET YOUR FREE

Coding Questions Catalog

Design Gurus Newsletter - Latest from our Blog
Boost your coding skills with our essential coding questions catalog.
Take a step towards a better tech career now!
Explore Answers
What are the basic questions asked in interview?
Interview bootcamp specializing in production engineering roles
Is Snowflake in high demand?
Related Courses
Image
Grokking the Coding Interview: Patterns for Coding Questions
Grokking the Coding Interview Patterns in Java, Python, JS, C++, C#, and Go. The most comprehensive course with 476 Lessons.
Image
Grokking Data Structures & Algorithms for Coding Interviews
Unlock Coding Interview Success: Dive Deep into Data Structures and Algorithms.
Image
Grokking Advanced Coding Patterns for Interviews
Master advanced coding patterns for interviews: Unlock the key to acing MAANG-level coding questions.
Image
One-Stop Portal For Tech Interviews.
Copyright © 2024 Designgurus, Inc. All rights reserved.