Chapitre 33. Classes abstraites (abc)
- Par Richard Gomez
Pages 685 à 704
Citer ce chapitre
- GOMEZ, Richard,
- Gomez, Richard.
- Gomez, R.
Citer ce chapitre
- Gomez, R.
- Gomez, Richard.
- GOMEZ, Richard,
Nous avons rencontré des classes abstraites au chapitre précédent. Nous savons qu’une classe abstraite n’a pas vocation à être implémentée. Elle sert de base à d’autres classes. Ces dernières en héritent l’interface (nous avons décrit de nombreuses interfaces tout au long de ce livre : l’interface propre aux séquences, aux itérables, aux tables de correspondance, etc.) Les méthodes définissant l’interface sont déclarées dans la classe abstraite sans être implémentées.Note. On rappelle que certains auteurs parlent de « contrat logiciel » pour décrire une interface.
Python n’implémente pas à proprement parler les classes abstraites (contrairement à des langages comme Java, C++ ou Pascal). Néanmoins, on peut toujours se débrouiller pour en fabriquer (et ce n’est pas contraire à l’esprit de Python). Nous avons vu, par exemple, au chapitre précédent comment définir une classe abstraite Number servant de base aux classes int, float et complex. Nous avons pour cela implémenté une classe MetaNumber dans laquelle nous avons surchargé les méthodes spéciales instance-check et subclasscheck. Ensuite, nous avons défini Number comme une simple coquille vide en prenant « metaclass = MetaNumber » :
Cela fonctionne bien malgré quelques défauts : d’une part, Python n’empêche pas l’utilisateur d’instancier Number, et d’autre part, cette dernière ne dresse pas la liste des méthodes contractuelles (les méthodes qui caractérisent une interface numérique). On peut même dériver Number sans respecter le contrat logiciel…
Date de mise en ligne : 23/02/2023
Ce chapitre est en accès conditionnel
Acheter cet ouvrage
35,99 €
Acheter ce chapitre
5,00 €