Welcome to Part 4 of the Python 3 Deep Dive series, where we'll explore the world of Object-Oriented Programming (OOP) in Python. In this section, we'll cover the fundamental concepts of OOP, including classes, objects, inheritance, polymorphism, and more.
Python’s OOP is built on a data model defined by special methods (also called magic or dunder methods). These methods allow user-defined objects to integrate seamlessly with language constructs.
class Bad: def __init__(self, items=[]): self.items = items # Shared across all instances!
class Good: def init(self, items=None): self.items = items or []python 3 deep dive part 4 oop
Python uses C3 linearization to determine method lookup order. Access via ClassName.__mro__. Welcome to Part 4 of the Python 3
class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass
print(D.mro)
ABCs define interfaces and can enforce method implementation. Python uses C3 linearization to determine method lookup
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
class Square(Shape):
def init(self, side):
self.side = side
def area(self):
return self.side ** 2
def perimeter(self):
return 4 * self.side
Python classes can interact with the language's syntax (loops, operators, context managers) by implementing specific dunder methods.