Welcome to oop-python-learning’s documentation!# Table of Contents Object Oriented Programming (OOP) Fundamentals 1. Procedural Programming 2. Object-Oriented Programming 2.1. Classes 2.2. Objects 2.3. Attributes and Methods 3. Class Anatomy: Attributes and Methods 3.1. Basic class 3.2. Adding Methods to a Class 3.3. What is self? 3.4. Add Attributes to Class 3.5. The __init__ constructor 3.6. Best practices Inheritance and Polymorphism 1. Instance-level data 2. Class-level data 3. Class Methods 3.1. Example - Class Method 1 3.2. Example - Class Method 2 4. Inheritance 4.1. Example - Inheritance 1 4.2. Example - Inheritance 2 4.3. The super().__init__ 5. Encapsulation 5.1. Example - Encapsulation 1 6. Polymorphism Integrating with standard Python 1. Operator Overloading: comparison 1.1. The __eq__() method 1.2. Other Comparison Operators 2. Operator Overloading: string representation 2.1. The __str__() method 2.2. The __repr__() method 2.3. Example - String Representation 1 2.4. Example - String Representation 2 3. Exceptions 3.1. Raising an Exception 3.2. Custom Exceptions Best Practices of class design 1. Managing data access: private attributes 1.1. Naming Convention: internal attributes 1.2. Naming Convention: pseudoprivate attributes 1.3. Use @property to customize access