LEARN COMPLETE PYTHON IN 24 HOURS

🟦 Table of Contents – Python OOP

🔹 1. Introduction to Object-Oriented Programming (OOP)

  • 1.1 What is OOP and Why Learn It?

  • 1.2 Real-World Examples – Class vs Object

  • 1.3 The 4 Pillars of OOP in Python

  • 1.4 Procedural vs Object-Oriented Programming

🔹 2. Classes and Objects – Basic Building Blocks

  • 2.1 Creating Classes

  • 2.2 Creating Objects

  • 2.3 The init Method and self Parameter

  • 2.4 Instance Variables vs Class Variables

  • 2.5 str and repr

🔹 3. Encapsulation – Data Hiding and Protection

  • 3.1 Public, Protected and Private Members

  • 3.2 Name Mangling

  • 3.3 @property, @setter, @deleter

🔹 4. Inheritance – Reusing Code

  • 4.1 Single Inheritance

  • 4.2 Using super()

  • 4.3 Method Overriding and Polymorphism

  • 4.4 Multiple Inheritance and MRO

🔹 5. Polymorphism – One Name, Different Behavior

  • 5.1 Method Overriding

  • 5.2 Operator Overloading

  • 5.3 Duck Typing

  • 5.4 Abstract Base Classes

🔹 6. Class Methods, Static Methods and Decorators

  • 6.1 @classmethod

  • 6.2 @staticmethod

  • 6.3 Alternative Constructors

  • 6.4 @property

🔹 7. Advanced OOP Concepts

  • 7.1 Composition vs Inheritance

  • 7.2 Data Classes (@dataclass)

  • 7.3 Magic Methods / Dunder Methods

  • 7.4 Metaclasses

🔹 8. Real-World OOP Projects & Best Practices

  • 8.1 Bank Account System

  • 8.2 Library Management System

  • 8.3 Employee Payroll System

  • 8.4 OOP Best Practices

🔹 9. Common Mistakes & Interview Preparation

  • 9.1 Common OOP Mistakes

  • 9.2 Python OOP Interview Questions

  • 9.3 Debugging OOP Code

🔹 10. Next Steps After Mastering OOP

  • 10.1 Design Patterns

  • 10.2 Decorators and Context Managers

  • 10.3 OOP in FastAPI / Django

  • 10.4 Resources

7. Advanced OOP Concepts

7.1 Composition vs Inheritance – When to Use Which

Both composition and inheritance let you reuse code, but they model relationships differently.

AspectInheritance ("is-a")Composition ("has-a")Winner (most cases)RelationshipChild is a kind of ParentClass has a part/componentCompositionCode ReuseInherits all public/protected membersExplicitly includes other classes as attributes—FlexibilityFixed hierarchy (hard to change later)Very flexible (can swap components)CompositionTight CouplingHigh (child depends heavily on parent)Low (loose coupling)CompositionWhen to preferClear "is-a" hierarchy (Dog is an Animal)"has-a" or "uses-a" (Car has an Engine)—Fragile base classCommon problem (changing parent breaks children)RareCompositionMultiple parentsSupported (but complex MRO)Multiple components easilyComposition

Inheritance Example

Python

class Engine: def start(self): return "Engine started" class Car(Engine): # Car is an Engine? (not really good modeling) def drive(self): return self.start() + " → Car moving"

Composition Example (preferred)

Python

class Engine: def start(self): return "Engine started" class Car: def init(self): self.engine = Engine() # Car has an Engine def drive(self): return self.engine.start() + " → Car moving" car = Car() print(car.drive()) # Engine started → Car moving

Golden Rule (2026 best practice): "Favor composition over inheritance" Use inheritance only when there is a clear, stable "is-a" relationship and you truly want to inherit behavior. Use composition for most other cases — it's more flexible, testable, and maintainable.

7.2 Data Classes (@dataclass) – Reduce Boilerplate Code

Introduced in Python 3.7, @dataclass automatically adds init, repr, eq, and more — reducing repetitive code.

Basic usage

Python

from dataclasses import dataclass @dataclass class Person: name: str age: int = 0 city: str = "Unknown" p = Person("Anshuman", 25, "Muzaffarpur") print(p) # Person(name='Anshuman', age=25, city='Muzaffarpur') print(p == Person("Anshuman", 25, "Muzaffarpur")) # True (auto eq)

Advanced options

Python

@dataclass(frozen=True) # immutable (like namedtuple) class Point: x: float y: float @dataclass(order=True) # adds <, >, <=, >= comparison class Student: name: str marks: int s1 = Student("Rahul", 85) s2 = Student("Priya", 92) print(s1 < s2) # True (compares marks)

With default factory (mutable defaults safe)

Python

from dataclasses import dataclass, field @dataclass class Team: name: str players: list[str] = field(default_factory=list) # new list each time t = Team("India") t.players.append("Virat") print(t.players) # ['Virat']

Benefits over normal class:

  • No need to write init, repr, eq manually

  • Type hints are used for clarity and tools (mypy)

  • Safer mutable defaults with field(default_factory=...)

7.3 Magic Methods / Dunder Methods Deep Dive

Dunder methods (double underscore) let you customize object behavior.

Most useful ones (beyond init, str, repr):

MethodPurposeExample Use Case__len__len(obj)len(my_vector)__getitem__obj[index]Custom list/dict-like classes__setitem__obj[index] = valueMutable custom containers__iter__for x in objMake class iterable__next__next(obj)Custom iterator__call__obj()Functor / callable object__enter__ / exitwith obj: ...Context manager__bool__if obj: ...Truth value testing__hash__hash(obj)Use as dict key (must implement with eq)__slots__Memory optimizationReduce memory for many instances

Example – Custom Vector with operators

Python

class Vector: def init(self, x, y): self.x = x self.y = y def add(self, other): return Vector(self.x + other.x, self.y + other.y) def len(self): return 2 def getitem(self, index): return (self.x, self.y)[index] def str(self): return f"Vector({self.x}, {self.y})" v1 = Vector(3, 4) v2 = Vector(1, 2) print(v1 + v2) # Vector(4, 6) print(len(v1)) # 2 print(v1[0]) # 3

7.4 Metaclasses – The Class Behind the Class (type() and Custom Metaclasses)

A metaclass is the class of a class — it controls how classes are created.

Default metaclass = type

Python

class MyClass: pass print(type(MyClass)) # <class 'type'>

Creating class dynamically with type()

Python

def hello(self): return "Hello from dynamic class!" DynamicClass = type( "DynamicClass", (object,), {"hello": hello, "value": 42} ) obj = DynamicClass() print(obj.hello()) # Hello from dynamic class! print(obj.value) # 42

Custom metaclass example – Auto-add docstring check

Python

class RequireDocstringMeta(type): def new(cls, name, bases, attrs): for attr_name, value in attrs.items(): if callable(value) and not attr_name.startswith("_"): if not value.__doc__: raise TypeError(f"Method {name}.{attr_name} needs docstring!") return super().__new__(cls, name, bases, attrs) class MyService(metaclass=RequireDocstringMeta): def process(self): """This has docstring – OK""" pass # def invalid(self): # TypeError if uncommented # pass

Real-world use cases of metaclasses:

  • Django models (auto-creates database mapping)

  • SQLAlchemy declarative base

  • Auto-registration of plugins/commands

  • Enforcing class standards (docstrings, naming)

Important advice (2026): Metaclasses are very powerful but make code harder to understand. Use them only when simpler solutions (decorators, __init_subclass__, class decorators) are not enough.

Mini Summary Project – Singleton via Metaclass

Python

class SingletonMeta(type): instances = {} def call_(cls, args, kwargs): if cls not in cls._instances: cls._instances[cls] = super().__call__(args, **kwargs) return cls._instances[cls] class Database(metaclass=SingletonMeta): def connect(self): print("Connected to database") db1 = Database() db2 = Database() print(db1 is db2) # True – same instance

This completes the full Advanced OOP Concepts section — now you understand composition, data classes, dunder methods, and even metaclasses!

📚 Amazon Book Library

All my books are FREE on Amazon Kindle Unlimited🌍 Exclusive Country-Wise Amazon Book Library – Only Here!

On GlobalCodeMaster.com you’ll find complete, ready-to-use lists of my books with direct Amazon links for every country.
Belong to India, Australia, USA, UK, Canada or any other country? Just click your country’s link and enjoy:
Any eBook FREE on Kindle Unlimited ✅ Or buy at incredibly low prices
400+ fresh books written in 2025-2026 with today’s latest AI, Python, Machine Learning & tech trends – nowhere else will you find this complete country-wise collection on one platform!
Choose your country below and start reading instantly 🚀
BOOK LIBRARY USA 2026 LINK
BOOK LIBRARY INDIA 2026 LINK
BOOK LIBRARY AUSTRALIA 2026 LINK
BOOK LIBRARY CANADA 2026 LINK
BOOK LIBRARY UNITED KINGDOM 2026 LINK
BOOK LIBRARY GERMANY 2026 LINK
BOOK LIBRARY FRANCE 2026 LINK
BOOK LIBRARY ITALY 2026 LINK
BOOK LIBRARY SPAIN 2026 LINK
BOOK LIBRARY NETHERLANDS 2026 LINK
BOOK LIBRARY BRAZIL 2026 LINK
BOOK LIBRARY MEXICO 2026 LINK
BOOK LIBRARY JAPAN 2026 LINK
BOOK LIBRARY POLAND 2026 LINK
BOOK LIBRARY IRELAND 2026 LINK
BOOK LIBRARY SWEDEN 2026 LINK
BOOK LIBRARY BELGIUM 2026 LINK