📊 Capítulo 09: Herança, MRO & Polimorfismo
Especialização em Sistemas com Python
🗺️ O Algoritmo C3 Linearization e a Ordem MRO no “Problema do Diamante”
flowchart TD
A["Classe Base: A"]
--> B["Classe B (herda de A)"]
A --> C["Classe C (herda de A)"]
B --> D["Classe D (herda de B, C - Herança Múltipla!)"]
C --> D
MRO["Ordem MRO Resolvida pelo CPython:\nD.__mro__ -> [D, B, C, A, object]\n(O algoritmo C3 garante que superclasses aparecem após subclasses sem ambiguidades!) ⚡"]
D -.-> MRO
style A fill:#ede7f6,stroke:#512da8,stroke-width:2px
style B fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style C fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style D fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style MRO fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
🎯 Slide 1: O Papel de super()
-
Nunca chame a classe pai diretamente pelo nome (
A.__init__(self)). - Sempre use
super().__init__(): Isso garante que a cadeia completa do MRO seja percorrida corretamente em designs cooperativos de herança múltipla!
🎯 Slide 2: Mixins em Python
- Classes utilitárias pequenas criadas exclusivamente para injetar comportamentos específicos em outras classes sem estabelecer relações de domínio profundas:
class JsonSerializableMixin:
def to_json(self) -> str:
return json.dumps(self.__dict__)
🎯 Slide 3: Duck Typing e Polimorfismo
- “Se anda como um pato e faz quack como um pato, então é um pato!”
- O Python não exige interfaces explícitas para polimorfismo: se o objeto possui o método esperado, ele pode ser consumido sem herança forçada!
🔗 Navegação do Capítulo 09
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim