Chapitre d’ouvrage

Chapitre 33. Classes abstraites (abc)

Pages 685 à 704

Citer ce chapitre


  • Gomez, R.
(2022). Chapitre 33. Classes abstraites (abc) Le petit Python orienté objet : Programmation orientée objet avec Python 3 (p. 685-704). Ellipses. https://stm.cairn.info/le-petit-python-oriente-objet--9782340064065-page-685?lang=fr.

  • Gomez, Richard.
« Chapitre 33. Classes abstraites (abc) ». Le petit Python orienté objet Programmation orientée objet avec Python 3, Ellipses, 2022. p.685-704. CAIRN.INFO, stm.cairn.info/le-petit-python-oriente-objet--9782340064065-page-685?lang=fr.

  • GOMEZ, Richard,
2022. Chapitre 33. Classes abstraites (abc) In : Le petit Python orienté objet Programmation orientée objet avec Python 3. Paris : Ellipses. Références sciences, p.685-704. URL : https://stm.cairn.info/le-petit-python-oriente-objet--9782340064065-page-685?lang=fr.

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 €

828 pages, format électronique (HTML et feuilletage, par chapitre)

Acheter ce chapitre

5,00 €

20 pages format électronique (HTML et feuilletage)
Membre d'une institution cliente ?