# Object-Oriented Programming (OOP) Exercises

This set of exercises introduces and builds on core OOP concepts in Python. You'll define classes, use special methods, and implement inheritance and polymorphism.

---

## Covered Topics

| Exercise       | Concept                                           |
|----------------|---------------------------------------------------|
| `oop1.py`      | Class definition, instance attributes, methods    |
| `oop2.py`      | Special methods: `__str__`, `__repr__`            |
| `oop3.py`      | Inheritance, `super()`, method overriding         |

---

## How to Use

Each file includes:
- One or more class stubs with `TODO` sections
- `assert`-based test cases to validate your code

You should see either expected output or clear failure messages.

---

##  Tips
- Always define an `__init__` method to initialize instance state
- Use `super()` to call base class methods when inheriting
- Implement `__str__` for friendly printing, and `__repr__` for debug/reconstruction clarity

---

## Coming Soon
- Class variables vs. instance variables
- Classmethods and staticmethods
- Encapsulation and property decorators

---

OOP unlocks the power of reusable, extensible code.