Learn Python Programming
Start with getting started, installation, and core basics. Clear explanations and practical examples to help you learn faster.
Python Multiple Inheritance
Multiple inheritance allows a class to inherit from more than one parent class, combining their attributes and methods. Python uses the Method Resolution Order (MRO) to determine which method is called.
Basic Multiple Inheritance
# A class can inherit from multiple parent classes
class Flyable:
def fly(self):
return f"{self.name} is flying!"
class Swimmable:
def swim(self):
return f"{self.name} is swimming!"
class Walkable:
def walk(self):
return f"{self.name} is walking!"
# Duck inherits from all three
class Duck(Flyable, Swimmable, Walkable):
def __init__(self, name):
self.name = name
duck = Duck("Donald")
print(duck.fly()) # Donald is flying!
print(duck.swim()) # Donald is swimming!
print(duck.walk()) # Donald is walking!
Method Resolution Order (MRO)
# When multiple parents have the same method, Python uses MRO
# MRO follows C3 linearization: left-to-right, depth-first
class A:
def greet(self):
return "Hello from A"
class B(A):
def greet(self):
return "Hello from B"
class C(A):
def greet(self):
return "Hello from C"
class D(B, C): # B is listed before C
pass
d = D()
print(d.greet()) # "Hello from B" (B comes first in MRO)
# View the MRO
print(D.__mro__)
# (D, B, C, A, object)
# Python searches: D → B → C → A → object
# Or use .mro() method
print(D.mro())
Mixins — The Practical Pattern
# Mixins are small classes that add specific functionality
# They are not meant to be instantiated alone
class JsonMixin:
"""Add JSON serialization to any class."""
def to_json(self):
import json
return json.dumps(self.__dict__, indent=2)
@classmethod
def from_json(cls, json_str):
import json
data = json.loads(json_str)
return cls(**data)
class LogMixin:
"""Add logging capability to any class."""
def log(self, message):
print(f"[{type(self).__name__}] {message}")
class TimestampMixin:
"""Add creation timestamp."""
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
def set_created(self):
from datetime import datetime
self.created_at = datetime.now().isoformat()
# Combine mixins with a main class
class User(JsonMixin, LogMixin):
def __init__(self, name, email):
self.name = name
self.email = email
user = User("Alice", "alice@example.com")
user.log("User created") # [User] User created
print(user.to_json()) # {"name": "Alice", "email": "alice@..."}
# Recreate from JSON
json_str = user.to_json()
user2 = User.from_json(json_str)
print(user2.name) # Alice
super() with Multiple Inheritance
# super() follows the MRO — it calls the NEXT class in line, not the parent
class Base:
def __init__(self):
print("Base.__init__")
class Left(Base):
def __init__(self):
print("Left.__init__")
super().__init__() # calls Right (next in MRO), not Base!
class Right(Base):
def __init__(self):
print("Right.__init__")
super().__init__() # calls Base
class Child(Left, Right):
def __init__(self):
print("Child.__init__")
super().__init__() # calls Left
child = Child()
# Output (follows MRO: Child → Left → Right → Base):
# Child.__init__
# Left.__init__
# Right.__init__
# Base.__init__
# Cooperative multiple inheritance pattern
class Serializable:
def __init__(self, **kwargs):
super().__init__(**kwargs)
def serialize(self):
return self.__dict__.copy()
class Validatable:
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.validate()
def validate(self):
pass # override in subclass
class Product(Serializable, Validatable):
def __init__(self, name, price, **kwargs):
self.name = name
self.price = price
super().__init__(**kwargs)
def validate(self):
if self.price < 0:
raise ValueError("Price cannot be negative")
Diamond Problem
# The diamond problem: D inherits B and C, both inherit A
# A
# / \
# B C
# \ /
# D
class A:
def method(self):
print("A.method")
class B(A):
def method(self):
print("B.method")
super().method()
class C(A):
def method(self):
print("C.method")
super().method()
class D(B, C):
def method(self):
print("D.method")
super().method()
D().method()
# D.method → B.method → C.method → A.method
# Each class called only ONCE thanks to MRO
# Python solves the diamond problem cleanly with C3 linearization
print(D.__mro__)
# (D, B, C, A, object)
- Python supports multiple inheritance — a class can have multiple parent classes.
- MRO (Method Resolution Order) determines which method is called — check with
Class.__mro__. - Use mixins (small, focused classes) as the primary pattern for multiple inheritance.
super()follows the MRO chain, not necessarily the direct parent class.- Python solves the diamond problem via C3 linearization — each class appears only once in the MRO.
Frequently Asked Questions
Answers to common Python getting-started questions
Python Programming Tutorial — Learn Python from Scratch
Python is the world's most popular programming language for beginners, data science, AI/ML, web development, and automation. This tutorial teaches Python step-by-step with clear explanations and runnable code examples. You can try every example in our free Python Compiler without installing anything.
Each topic builds on the previous one, starting from installation and Hello World through advanced concepts like decorators, generators, and file I/O. Whether you are a complete beginner or refreshing specific skills, every page gives you immediately usable code.
What This Tutorial Covers
- Getting Started: Install Python, run online, Hello World
- Basics: Variables, data types, type conversion, input/output
- Operators: Arithmetic, comparison, logical, assignment
- Control Flow: if/elif/else, for loops, while, break/continue
- Data Structures: Lists, tuples, sets, dictionaries
- Strings: Methods, slicing, formatting, f-strings
- Functions: Parameters, return values, *args, **kwargs, scope
- OOP: Classes, objects, inheritance, polymorphism
- File I/O: Reading, writing, CSV, JSON handling
- Exceptions: try/except, custom exceptions, raise
- Advanced: List comprehensions, lambda, generators, decorators
- Modules: import, pip, packages, __name__ == "__main__"
Why Learn Python in 2026?
- #1 most popular language: Ranked first on TIOBE, Stack Overflow, and GitHub for multiple years running.
- AI and Data Science: The primary language for machine learning (TensorFlow, PyTorch, scikit-learn), data analysis (Pandas, NumPy), and AI development.
- Web development: Django and Flask power backends at companies like Instagram, Spotify, and Pinterest.
- Automation: Automate files, emails, web scraping, reports, and system administration tasks in minutes.
- Beginner-friendly: Clean syntax with enforced indentation makes code readable from day one — no curly braces or semicolons.
- Massive job market: Python developers are in high demand across tech, finance, healthcare, and research.
Python vs Other Languages
| Feature | Python | Java | JavaScript | C++ |
|---|---|---|---|---|
| Syntax | Very clean, readable | Verbose | Moderate | Complex |
| Typing | Dynamic, strong | Static, strong | Dynamic, weak | Static, strong |
| Speed | Slower (interpreted) | Fast (JIT) | Fast (V8 JIT) | Fastest (native) |
| Best For | AI/ML, data, automation | Enterprise, Android | Web frontend/backend | Systems, games |
| Learning Time | 2–4 weeks basics | 4–6 weeks basics | 3–4 weeks basics | 8–12 weeks basics |
How to Get Started
- Run Python online: Use our free Python Compiler — no installation needed.
- Install locally: Download Python 3 from
python.org(Windows/Mac) or useapt install python3(Linux). - Verify: Run
python3 --versionin your terminal to confirm installation. - Choose an editor: VS Code with Python extension (free), PyCharm Community (free), or Jupyter Notebook for data science.
- Follow this tutorial in order: Start from Introduction and work through each topic sequentially.
Frequently Asked Questions
No. Python is designed to be beginner-friendly. This tutorial starts from absolute zero and builds up gradually.
Python 3.10+ is recommended. Python 2 reached end-of-life in 2020. All examples in this tutorial use Python 3 syntax.
Basics (syntax, loops, functions) take 2–4 weeks. Intermediate (OOP, file I/O, modules) adds 3–4 weeks. Specialisation (Django, data science, ML) takes another 2–3 months.
Yes, completely free. No account, no sign-up. All topics and examples available without restriction.
Who Is This For?
Complete beginners choosing their first programming language. Students in CS courses needing a Python reference. Data analysts transitioning from Excel to Python (Pandas). Self-taught developers adding Python to their skill set. Professionals automating repetitive tasks. Anyone preparing for Python coding interviews.