Só para dar uma dica para as pessoas que ainda vão aprender OOP. Quase todos os exemplos que são dados, inclusive neste caso, são para exemplificar como o mecanismo funciona. Eles não servem para ensinar a orientação a objeto como ele deve ser usada. Na verdade ela costuma criar um vício que nunca mais a pessoa consegue se livrar, porque ela aprende errado, treina esse erro e é ele que fará por toda a vida, inclusive ensinará outras pessoas de forma errada e ainda brigará pelo erro.

Note que Animal é uma classificação não um objeto real, portanto ele deveria ser uma classe abstrata. Na vida real não é tão comum encontrarmos essa hierarquia. Esse exemplo é m uito usado porque o criador do termo era um biólogo, ele não fazia aplicações comercais, jogos e outras coisas do tipo.

Em determinado momento Vehicle herda de ABC que eu não tenho a menor ideia do que seja, mas é quase certo que é uma herança errada. Geralmente Vehicle não herda de nada, mas pode acontecer em algum caso específico. Um veículo é composto por partes, não herda de alguma coisa (https://pt.stackoverflow.com/q/11378/101).

Tem um caso que é meio polêmico, mas pode ser útil em alguns casos se a classe Person for abstrata. O mais correto, mas pode ter exceções, que um Employee não seja uma pessoa. O objeto é real é uma Person, e ele tem papeis (que são objetos) que ele desempenha no sistema, por exemplo ser um Employee que é algo separado, é só o papel. Então Employee é composto de dados de uma pessoa. Eventualmente uma pessoa pode ter uma lista de papéis de ele representa no sistemas e um dele é ter na agregação de ser um Employee (https://pt.stackoverflow.com/q/86715/101). Ver também: https://pt.stackoverflow.com/q/313990/101.

O texto dá uma pincelada muito por cima sobre OOP e comete esses erros, por isso que eu falo que a pessoa só vai aprender se estudar tudo da computação, com materiais bons e ter uma mente questionadora em vez de seguidora (de receitas de bolo).

Esse é só um dos motivos que a maioria dos programadores não sabem programar orientado a objeto, o primeiro começa por nem saber que existem duas escolas diferentes que pregam conceitos quase opostos.

Aqui vai uma opinião: embora funcione, Python não é a linguagem mais adequada para aprender OOP. E é um dos motivos que acho que ela não é boa para começar aprender, a não ser que se apreenda o bem básico de programação neçla e depois use outra para conceitos mais avançados. Então acho melhor optar por outra coisa. Python é excelente para ensinar as pessoas fazerem scripts, o que não envolve OOP. È possível aprender bem quase qualquer coisa de programação com Python, mas será um remendo, e a pessoa precisará de um discernimento muito maior para conseguir um bom resultado com isso, o que é quase certo que ela não terá, afinal ela está aprenbdendo. E quem ensina não costuma ajudar nissoi porque não entende as dificuldade que estou falando aqui. A pessoa incentiva começar com Python mas não sabe nem porque isso é bom (já dei o spoiler).

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).