10 questions. Une seule bonne réponse par question, et
l'explication s'affiche dès que vous avez répondu.
Le cours · La fiche
0 / 10
1Vous appelez v.afficher() et Python répond « takes 0 positional arguments but 1 was given ». Pourquoi ?
self se déclare dans chaque méthode, mais ne se passe jamais à l'appel : Python l'ajoute pour vous. Le message est donc littéral — la méthode n'attend aucun argument, et elle en reçoit un : l'objet lui-même.
2nombre = 0 écrit juste sous class Voiture:, c'est :
Écrit dans le corps de la classe, il n'existe qu'une fois pour toutes les instances — pratique pour un compteur d'objets créés. Un attribut d'instance naît dans __init__ et porte self. : self.marque = marque, différent d'une voiture à l'autre.
3Comment s'appelle la méthode appelée à la destruction d'un objet ?
__del__, pendant de __init__. __def__ n'existe pas — c'est la confusion classique avec le mot-clé def. Et comme Python libère la mémoire tout seul, un destructeur ne sert en pratique qu'à fermer une ressource : fichier, connexion réseau.
4Que garantit vraiment le double souligné de __age ?
C'est le name mangling : __age devient _Personne__age. Qui connaît la règle y accède encore. Une convention, pas une serrure — le but n'est pas d'empêcher un attaquant, mais d'empêcher un collègue de dépendre par erreur de l'intérieur d'une classe.
5À quelle condition un setter sert-il à quelque chose ?
Un setter qui se contente de self.__age = a n'apporte rien qu'un attribut public : trois lignes de plus pour le même résultat. Sa raison d'être est le contrôle — refuser un âge négatif, borner une note. Sans test, c'est de la cérémonie.
6À quoi sert @property ?
Syntaxe d'attribut, contrôle de méthode. Le code appelant écrit p.age = 35 comme s'il touchait la donnée ; en dessous, le setter décoré vérifie. Gros avantage : on peut ajouter un contrôle après coup sans réécrire une ligne du code qui utilise la classe.
7Une classe fille lève « AttributeError: '_Serveur__ip' ». Qu'a-t-on oublié ?
Dès que la fille écrit son propre __init__, il remplace celui de la mère : les attributs de la mère ne sont jamais créés. D'où la règle mécanique — super().__init__(…) en première ligne du constructeur d'une fille, avant d'ajouter ce qui lui est propre.
8Une classe Admin redéfinit se_connecter(). Comment garder aussi le comportement de la mère ?
La redéfinition (override) masque la méthode mère, elle ne la supprime pas : super() y donne toujours accès. Le motif habituel est donc « d'abord ce que fait la mère, puis ce que j'ajoute » — le contrôle du mot de passe, puis les privilèges.
9Classe, objet, attribut, méthode : lequel est « le plan » ?
La classe est le plan, l'objet la réalisation. L'attribut est une caractéristique (la marque), la méthode une action (rouler). Le plan d'une maison n'abrite personne : c'est pourquoi une classe s'écrit une fois et s'instancie autant de fois qu'on veut — avec une majuscule au nom, par convention.
10À l'intérieur d'une classe, comment lire une donnée encapsulée ?
Si la classe court-circuite ses propres accesseurs, tout contrôle ou calcul ajouté plus tard au getter sera appliqué au code extérieur, pas au sien. La règle est constante : une classe passe par ses propres getters, pas par l'attribut brut.