By George Freedom
Move beyond simple scripts and learn Object-Oriented Programming (OOP) in Python. This advanced course (Lessons 1-12) dives deep into the principles of classes, inheritance, and abstraction, preparing you to architect sophisticated software solutions.
This repository hosts "Python Advanced: Mastering OOP for Scalable Software" – a comprehensive course presented in Jupyter Notebooks and Python scripts.
This course is for learners who have mastered Python's fundamentals and intermediate techniques. You are now ready to stop just writing code and start designing it. We will explore the mindset and tools necessary to build clean, reusable, and maintainable software systems.
This advanced curriculum is structured into modules focusing on the core tenets of professional software design.
- Lesson 1: Introduction to OOP - The foundational shift from writing scripts to designing self-contained, autonomous entities (objects).
- Lesson 2: Encapsulation - Securing the core systems of your objects and creating clean, public command interfaces.
- Lesson 3: Getters, Setters & @property - Building the precise dials, levers, and readouts for your objects, with built-in validation.
- Lesson 4: Inheritance - Creating specialized units by inheriting and extending core designs.
- Lesson 5: Polymorphism - Issuing a single command to a diverse squad of objects and having each respond in its own unique way.
- Lesson 6: Abstraction - Designing abstract blueprints that define a contract of required capabilities without dictating the implementation.
- Lesson 7: Documentation in OOP - Writing the professional technical manuals and operational guides (
docstrings) for your classes and modules. - Lesson 8: Dunder Methods - Rewiring the fundamental "physics" of your objects to define how they interact with Python's native operators (
+,==,len(), etc.). - Lesson 9: Static variables, constants, methods and classmethods - Managing data and behaviors that belong to the class blueprint itself.
- Lesson 10: Enumerations - Creating a fixed set of commands, states, or identifiers to prevent errors and improve code clarity.
- Lesson 11: Decorators - Wrapping your functions and methods in "protocol layers" for logging, validation, or performance monitoring.
- Lesson 12: New Horizons & Roadmaps - How to succeed in IT world, how to navigate there and what to take into a backpack for the expedition.
Upon completing this expedition, you will be able to:
- Think and design solutions in an Object-Oriented way.
- Build your own custom classes with well-defined attributes, properties, and methods.
- Master core OOP principles: Encapsulation, Inheritance, and Polymorphism.
- Use advanced features like properties, static/class methods, and dunder methods to create elegant APIs for your classes.
- Write cleaner, more modular, reusable, and scalable Python code suitable for complex projects.
- Apply basic software design patterns to structure your applications professionally.
- A solid understanding of Python topics covered in the Python Foundations Course and Python Intermediate Course courses or equivalent experience.
- This includes undestanding of data structures, loops, functions, file I/O, virtual environments, and using external libraries.
- An interest in moving beyond simple scripting towards software design and architecture.
Here is a guide on how to download the Jupyter Notebooks (.ipynb files) and how to open them. You can choose to work locally (on your computer) or online.
- Go to the main page of this repository on GitHub.
- Click the green Code button.
- Select Download ZIP. Important: Extract (unzip) the downloaded folder to a location on your computer (e.g., Documents/PythonCourse). Do not try to run files directly inside the ZIP archive.
If you are comfortable with the terminal and want to easily update materials later:
- Open your terminal or command prompt.
- Run the following command:
git clone https://github.com/GeorgeFreedomTech/python-advanced-course.git
This is the best way to work if you want to keep everything on your own computer.
Prerequisites:
- VS Code installed.
- Python installed.
- Jupyter Extension for VS Code installed (search for "Jupyter" by Microsoft in the Extensions marketplace).
Steps:
- Open VS Code.
- Go to File > Open Folder... and select the folder you downloaded/cloned.
- Click on any file ending in .ipynb.
- In the top-right corner, click Select Kernel and choose your Python version (or venv).
- You can now run the code cells by clicking the "Play" button next to them.
If you cannot install Python locally or want to try the code quickly in your browser.
Prerequisites:
- You have to have a Google account
Steps:
- Go to colab.research.google.com.
- Log in with your Google Account.
- Select the GitHub tab in the pop-up window.
- Paste the URL of this repository and search.
- Click on the notebook you want to open.
- Alternatively: You can go to the Upload tab and upload the .ipynb file you downloaded in Part 1.
- Educational Resource: A practical, hands-on guide for taking your Python skills to a professional, object-oriented level.
- Professional Portfolio: Demonstrating my teaching methodology for advanced software design concepts.
- Content Foundation: A source of examples for articles, tutorials, and social media.
- Visit my website: https://GeorgeFreedom.com
- Connect on LinkedIn: https://www.linkedin.com/in/georgefreedom/
- Let's talk: https://cal.com/georgefreedom
Copyright (c) 2025 Jiří Svoboda (George Freedom) / George Freedom Tech
This work (educational materials, including text, explanations, exercises, and accompanying code examples within the Jupyter Notebooks) is licensed under:
- Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License
Architect your code like a pro!