PYTHON

Python Override Method: Syntax, Usage, and Examples

The Python override method feature lets you change the behavior of methods in a child class that were originally defined in a parent class. It’s a core concept in object-oriented programming and gives you fine control over how your objects behave.


How to Use the Python Override Method

To override a method in Python, define a method in the child class with the exact same name as the method in the parent class. Python will use the version in the child class when that method is called on an instance of the child.

class Parent:
    def greet(self):
        print("Hello from Parent")

class Child(Parent):
    def greet(self):
        print("Hello from Child")

Now when you create a Child object and call greet(), it runs the child version:

child = Child()
child.greet()  # Output: Hello from Child

The child’s greet() method completely replaces the one from Parent.


When to Use the Override Method in Python

1. Customizing Behavior in a Subclass

A common use of the override method Python provides is to change or extend logic defined in a base class. This keeps your code organized and avoids duplicating logic unnecessarily.

Let’s say you have a general Vehicle class with a start_engine() method. A Boat or Spaceship subclass might need a different engine startup process. Overriding lets you make that change where it matters.

2. Working with Frameworks or Inheritance Chains

In frameworks like Django or Flask, you'll often override built-in methods to change how views, serializers, or models behave. Python override method allows you to tap into prebuilt functionality and make it do what you want.

3. Enabling Polymorphism

When you override methods in subclasses, you can call those methods through a shared parent interface. That’s called polymorphism. It lets you write flexible code that works across multiple types of objects without knowing exactly which type you're dealing with.


Examples of Method Overriding in Python

Here are some beginner-friendly examples that show how method overriding in Python works in practice.

1. Simple Method Override

class Animal:
    def sound(self):
        print("Some generic sound")

class Dog(Animal):
    def sound(self):
        print("Bark")

a = Animal()
a.sound()  # Output: Some generic sound

d = Dog()
d.sound()  # Output: Bark

The Dog class overrides the sound() method from Animal with a more specific behavior.

2. Extending a Method Instead of Replacing It

Sometimes you don’t want to replace a method entirely. You just want to add something to it. You can use the super() function to call the method from the parent class and add your custom logic around it.

class Person:
    def introduce(self):
        print("Hello, I'm a person.")

class Programmer(Person):
    def introduce(self):
        super().introduce()
        print("And I write Python code.")

p = Programmer()
p.introduce()
# Output:
# Hello, I'm a person.
# And I write Python code.

This pattern is useful when you want to build on top of existing behavior.

3. Python Override Class Method with Parameters

Overridden methods can take parameters, just like any other method.

class Shape:
    def area(self, value):
        print("Calculating area...")

class Square(Shape):
    def area(self, side):
        print(f"Area of square: {side * side}")

sq = Square()
sq.area(5)  # Output: Area of square: 25

Even though both methods are named area, only the version in Square is used for sq.


Learn More About the Override Method in Python

Method Resolution Order (MRO)

When you call a method, Python looks up the inheritance tree to find the appropriate version. This path is known as the Method Resolution Order (MRO). You can inspect it using ClassName.__mro__.

class A:
    def action(self):
        print("A")

class B(A):
    def action(self):
        print("B")

class C(B):
    pass

c = C()
c.action()  # Output: B
print(C.__mro__)  # (<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)

Even though C doesn't define action(), Python uses the one in B because it comes first in the MRO.

Understanding MRO is especially important when working with multiple inheritance.

Overriding Built-In Methods

You can override methods inherited from built-in classes like list, dict, or even object. For example, you might override __str__() to customize how an object is printed.

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

    def __str__(self):
        return f"'{self.title}' by {self.author}"

b = Book("1984", "George Orwell")
print(b)  # Output: '1984' by George Orwell

This override controls how print() or str() displays the object.

Python supports overriding many special methods, including:

  • __len__() – Length of object
  • __eq__() – Equality comparison
  • __add__() – Behavior for + operator
  • __getitem__() – Item access with []

These are called dunder methods (short for “double underscore”), and they let you create classes that behave like built-in types.

Override Method Python with Abstract Base Classes

You might want to require that a subclass override a method. That’s where abstract base classes (ABCs) help. You define them using the abc module.

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def make_sound(self):
        pass

class Cow(Animal):
    def make_sound(self):
        print("Moo")

# cow = Animal()  # This would raise an error
c = Cow()
c.make_sound()  # Output: Moo

If you forget to override make_sound() in the Cow class, Python raises an error when you try to create an instance.

This technique is especially useful when you're building APIs or frameworks and want to define a structure that others must follow.

Python Override Class Method in Multi-Level Inheritance

Overriding works at any depth of inheritance. You can override a method in a grandchild class even if the parent class already overrode it.

class A:
    def do_work(self):
        print("Work from A")

class B(A):
    def do_work(self):
        print("Work from B")

class C(B):
    def do_work(self):
        print("Work from C")

c = C()
c.do_work()  # Output: Work from C

Every level has a chance to replace or extend behavior.

Avoiding Unintended Overrides

Method overriding in Python is powerful, but it can lead to problems if you accidentally override a method you didn’t mean to. For example, if your method name matches one from the parent class, you may break things without realizing it.

To avoid these issues:

  • Pick clear, specific names for your methods.
  • Use code linters like pylint or flake8 to catch mistakes.
  • Consider using @final decorators (Python 3.8+) if you want to prevent overriding:

from typing import final

class Parent:
    @final
    def do_not_override(self):
        print("Don't touch this")

If a subclass tries to override do_not_override(), Python will raise an error during type checking.


The Python override method feature lets you replace or extend behavior in child classes without touching the parent class. You can customize logic, simplify code reuse, and build flexible hierarchies. Overriding works with regular methods, special methods, and even abstract base classes.

Learn to Code in Python for Free
Start learning now
button icon
To advance beyond this tutorial and learn Python by doing, try the interactive experience of Mimo. Whether you're starting from scratch or brushing up your coding skills, Mimo helps you take your coding journey above and beyond.

Sign up or download Mimo from the App Store or Google Play to enhance your programming skills and prepare for a career in tech.

You can code, too.

© 2025 Mimo GmbH

Reach your coding goals faster