Chapitre 27. Fonction super
- Par Richard Gomez
Pages 577 à 600
Citer ce chapitre
- GOMEZ, Richard,
- Gomez, Richard.
- Gomez, R.
Citer ce chapitre
- Gomez, R.
- Gomez, Richard.
- GOMEZ, Richard,
Définition 27.1. Soit X une classe. La superclasse de X lors de la résolution d’un nom qualifié est la classe qui se trouve juste après X dans la mro suivie.
On ne confondra pas la superclasse de X avec ses superclasses. Les superclasses de X sont les ancêtres de X et il arrive parfois que la superclasse de X ne soit pas un ancêtre de X (sic).
Supposons que a est de type A et Python essaye de résoudre le nom a.nom. Il suit alors l’ordre donné par la linéarisation de A (voir chapitre précédent). Supposons que X est un item de cette linéarisation. La superclasse de X est, par définition, l’item qui vient juste après dans cette linéarisation.
La terminologie est trompeuse : on devrait dire la superclasse de X dans la linéarisation .
Exemple. On crée ex nihilo des classes A, B, C, D et E puis des classes U(A,B,C), V(D,B,E), W(D,A) et Z(U,V,W). Alors la linéarisation de V est L(V) = VDBEO, et celle de Z est L(Z) = ZUVWDABCEO, ainsi :
tandis que
Pour chaque mro dans laquelle figure D, on a une superclasse de D : pour L(D) c’est O, pour L(V) c’est B, pour L(W) c’est A, et pour L(Z) c’est A.
On constate ici que la superclasse de D n’est pas forcément un ancêtre de D. Voici un exemple plus simple :
Affichons la linéarisation de Z :
La superclasse de X dans la linéarisation de Z est Y, ce n’est pas un ancêtre, mais un coparent. La superclasse de X dans la linéarisation de X est object.
D’un point de vue rigoureux, super est un type. On se sert d…
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 €