# Inheritance & Overriding — Python

Source: https://www.geekswithgeeks.com/en/python/py-inheritance

> Build a new class on top of an existing one, and customize behaviour.

## Extending a class

A subclass gets everything from its parent and can add or **override** methods. `super()` calls the parent's version.

```python
class Animal:
    def __init__(self, name):
        self.name = name
    def speak(self):
        return f"{self.name} makes a sound"

class Dog(Animal):
    def speak(self):                 # override
        base = super().speak()
        return f"{base}: Woof!"

print(Dog("Rex").speak())
```

## MRO in brief

Python supports multiple inheritance and checks method lookup via the **MRO** (Method Resolution Order) — but single inheritance covers most real code.
