Podcast
Questions and Answers
Combien de fois la méthode _add_
est-elle appelée lors de l'exécution de l'instruction f2 = f1 + 2.0
si f1
est une instance de la classe Fraction
?
Combien de fois la méthode _add_
est-elle appelée lors de l'exécution de l'instruction f2 = f1 + 2.0
si f1
est une instance de la classe Fraction
?
- 4
- 2
- 1
- 3 (correct)
Qu'affichera le programme suivant ?
class MaClasse():
x = -1
def __init__(self, x=10):
self._value = x
self.__class__.x = max(self.__class__.x, x)
@classmethod
def get_x(cls):
return cls.x
if __name__ == '__main__':
c1 = MaClasse(1)
c2 = MaClasse()
print(c1.__class__.get_x())
Qu'affichera le programme suivant ?
class MaClasse():
x = -1
def __init__(self, x=10):
self._value = x
self.__class__.x = max(self.__class__.x, x)
@classmethod
def get_x(cls):
return cls.x
if __name__ == '__main__':
c1 = MaClasse(1)
c2 = MaClasse()
print(c1.__class__.get_x())
10
Qu'affiche le code suivant ?
import copy
class MaClasse():
def __init__(self, x):
self.x = x
def __repr__(self):
return str(self.x)
if __name__ == '__main__':
l = [MaClasse(1), MaClasse(2)]
q = copy.copy(l)
l.append(MaClasse(4))
l[0].x = 0
print(q)
Qu'affiche le code suivant ?
import copy
class MaClasse():
def __init__(self, x):
self.x = x
def __repr__(self):
return str(self.x)
if __name__ == '__main__':
l = [MaClasse(1), MaClasse(2)]
q = copy.copy(l)
l.append(MaClasse(4))
l[0].x = 0
print(q)
- [0, 2] (correct)
- [0, 2, 4]
- [1, 2, 4]
- [1, 2]
Une classe fille hérite toujours de TOUS les attributs et méthodes de sa classe mère, y compris ceux qui sont déclarés comme privés.
Une classe fille hérite toujours de TOUS les attributs et méthodes de sa classe mère, y compris ceux qui sont déclarés comme privés.
En programmation orientée objet, la capacité d'une classe à étendre les propriétés et les méthodes d'une autre classe est appelée ______.
En programmation orientée objet, la capacité d'une classe à étendre les propriétés et les méthodes d'une autre classe est appelée ______.
Quelle méthode Python est utilisée pour appeler le constructeur de la classe parent à partir de la classe enfant ?
Quelle méthode Python est utilisée pour appeler le constructeur de la classe parent à partir de la classe enfant ?
Si une méthode est définie comme abstraite dans une classe, il est obligatoire de l'implémenter dans toutes les sous-classes non abstraites.
Si une méthode est définie comme abstraite dans une classe, il est obligatoire de l'implémenter dans toutes les sous-classes non abstraites.
Comment déclare-t-on une méthode abstraite en Python en utilisant le module abc
?
Comment déclare-t-on une méthode abstraite en Python en utilisant le module abc
?
Dans le contexte de l'héritage multiple en Python, que signifie MRO ?
Dans le contexte de l'héritage multiple en Python, que signifie MRO ?
L'outil qui permet de parcourir un programme pas à pas dans PyCharm est le ______.
L'outil qui permet de parcourir un programme pas à pas dans PyCharm est le ______.
Combien de fois la méthode _add_
est-elle appelée lorsque l'instruction f2 = f1 + 2.0
est exécutée, en considérant l'extrait de code de la classe Fraction?
Combien de fois la méthode _add_
est-elle appelée lorsque l'instruction f2 = f1 + 2.0
est exécutée, en considérant l'extrait de code de la classe Fraction?
Quelle valeur sera affichée pour x
après l'exécution du code suivant? c1 = MaClasse(1); c2 = MaClasse(); print(c1._class_.get_x())
Quelle valeur sera affichée pour x
après l'exécution du code suivant? c1 = MaClasse(1); c2 = MaClasse(); print(c1._class_.get_x())
Quel sera le résultat affiché par le code suivant: l = [MaClasse(1), MaClasse(2)]; q = copy.copy(l); l.append(MaClasse(4)); l[0].x = 0; print(q)
Quel sera le résultat affiché par le code suivant: l = [MaClasse(1), MaClasse(2)]; q = copy.copy(l); l.append(MaClasse(4)); l[0].x = 0; print(q)
Dans le contexte de l'héritage en programmation orientée objet, une classe fille hérite de tous les attributs et méthodes de sa classe mère, y compris ceux qui sont déclarés comme privés dans la classe mère.
Dans le contexte de l'héritage en programmation orientée objet, une classe fille hérite de tous les attributs et méthodes de sa classe mère, y compris ceux qui sont déclarés comme privés dans la classe mère.
Lors de la construction d'une instance d'une classe fille qui hérite d'une classe mère, il est souvent nécessaire d'appeler le constructeur de la classe parent en utilisant la fonction ______.
Lors de la construction d'une instance d'une classe fille qui hérite d'une classe mère, il est souvent nécessaire d'appeler le constructeur de la classe parent en utilisant la fonction ______.
Quelle est la principale utilité de l'utilisation de la fonction super()
dans le contexte de l'héritage en programmation orientée objet?
Quelle est la principale utilité de l'utilisation de la fonction super()
dans le contexte de l'héritage en programmation orientée objet?
En Python, il est possible d'utiliser le décorateur @override
sans importer de module spécifique. Il est automatiquement reconnu par l'interpréteur.
En Python, il est possible d'utiliser le décorateur @override
sans importer de module spécifique. Il est automatiquement reconnu par l'interpréteur.
Associez chaque classe avec une méthode qui serait la plus appropriée pour être définie au niveau de la classe Individu
dans une hiérarchie d'héritage:
Associez chaque classe avec une méthode qui serait la plus appropriée pour être définie au niveau de la classe Individu
dans une hiérarchie d'héritage:
Dans le contexte des classes abstraites, quel est le but de lever une exception NotImplementedError
dans une méthode?
Dans le contexte des classes abstraites, quel est le but de lever une exception NotImplementedError
dans une méthode?
Le module Python qui fournit une base pour définir des classes abstraites est le module ______.
Le module Python qui fournit une base pour définir des classes abstraites est le module ______.
Combien de fois la méthode _add_
est-elle appelée lors de l'exécution de l'instruction f1 + 2.0
?
Combien de fois la méthode _add_
est-elle appelée lors de l'exécution de l'instruction f1 + 2.0
?
Que va afficher le code suivant?
class MaClasse():
x = -1
def _init_(self, x=10):
self._value = x
self._class_.x = max(self._class_.x, x)
@classmethod
def get_x(cls):
return cls.x
if __name__ == '__main__':
c1 = MaClasse(1)
c2 = MaClasse()
print(c1._class_.get_x())
Que va afficher le code suivant?
class MaClasse():
x = -1
def _init_(self, x=10):
self._value = x
self._class_.x = max(self._class_.x, x)
@classmethod
def get_x(cls):
return cls.x
if __name__ == '__main__':
c1 = MaClasse(1)
c2 = MaClasse()
print(c1._class_.get_x())
Quel sera le résultat de l'exécution du code suivant?
import copy
class MaClasse():
def _init_(self, x):
self.x = x
def _repr_(self):
return str(self.x)
if __name__ == '__main__':
l = [MaClasse(1), MaClasse(2)]
q = copy.copy(l)
l.append(MaClasse(4))
l[0].x = 0
print(q)
Quel sera le résultat de l'exécution du code suivant?
import copy
class MaClasse():
def _init_(self, x):
self.x = x
def _repr_(self):
return str(self.x)
if __name__ == '__main__':
l = [MaClasse(1), MaClasse(2)]
q = copy.copy(l)
l.append(MaClasse(4))
l[0].x = 0
print(q)
Dans le contexte de l'héritage en programmation orientée objet, une classe fille hérite de tous les attributs et méthodes de sa classe mère, y compris ceux qui sont déclarés privés dans la classe mère.
Dans le contexte de l'héritage en programmation orientée objet, une classe fille hérite de tous les attributs et méthodes de sa classe mère, y compris ceux qui sont déclarés privés dans la classe mère.
Dans le contexte de la programmation orientée objet, comment appelle-t-on le mécanisme par lequel une classe fille peut fournir une implémentation spécifique d'une méthode déjà définie dans sa classe mère?
Dans le contexte de la programmation orientée objet, comment appelle-t-on le mécanisme par lequel une classe fille peut fournir une implémentation spécifique d'une méthode déjà définie dans sa classe mère?
Pour réutiliser la méthode de la classe parent dans une classe enfant, on utilise la fonction ______.
Pour réutiliser la méthode de la classe parent dans une classe enfant, on utilise la fonction ______.
Dans une hiérarchie de classes, où est-il préférable de définir les attributs pour réduire la redondance de code?
Dans une hiérarchie de classes, où est-il préférable de définir les attributs pour réduire la redondance de code?
Une classe abstraite peut être instanciée directement.
Une classe abstraite peut être instanciée directement.
Quel module en Python est utilisé pour définir des classes abstraites?
Quel module en Python est utilisé pour définir des classes abstraites?
Associez les éléments suivants relatifs à l'héritage multiple :
Associez les éléments suivants relatifs à l'héritage multiple :
Flashcards
Classe fille
Classe fille
Une classe qui hérite les attributs et méthodes d'une autre classe.
Déclaration d'héritage
Déclaration d'héritage
Déclarer la classe mère lors de la définition d'une nouvelle classe.
Fonction super()
Fonction super()
Fonction qui permet d'accéder au constructeur de la classe parent.
Attributs privés (__x
)
Attributs privés (__x
)
Signup and view all the flashcards
Attributs protégés (_x
)
Attributs protégés (_x
)
Signup and view all the flashcards
Redéfinir l'héritage
Redéfinir l'héritage
Signup and view all the flashcards
super()
super()
Signup and view all the flashcards
@override
@override
Signup and view all the flashcards
Méthode abstraite
Méthode abstraite
Signup and view all the flashcards
Classe abstraite
Classe abstraite
Signup and view all the flashcards
F1 + 2.0
F1 + 2.0
Signup and view all the flashcards
Objets d'une même classe
Objets d'une même classe
Signup and view all the flashcards
Héritage
Héritage
Signup and view all the flashcards
Sous-classe
Sous-classe
Signup and view all the flashcards
Classe enfant
Classe enfant
Signup and view all the flashcards
Héritage multiple
Héritage multiple
Signup and view all the flashcards
Interface
Interface
Signup and view all the flashcards
Le débogueur
Le débogueur
Signup and view all the flashcards
Héritage (Définition)
Héritage (Définition)
Signup and view all the flashcards
Classe parent
Classe parent
Signup and view all the flashcards
Module abc
Module abc
Signup and view all the flashcards
Niveaux d'héritage
Niveaux d'héritage
Signup and view all the flashcards
MRO
MRO
Signup and view all the flashcards
Study Notes
Quiz
- L'instruction
F1 + 2.0
appelle la méthode_add_
surf1
, soitf1.__add__(2.0)
. other
correspond à2.0
, qui est un float.- Puisque
other
n'est ni une fraction ni un entier, il est considéré comme un entier (self.__add__(2)
). - Dans la méthode
add
,other
devient2
, qui est un int. - La boucle appelle
self + Fraction(2)
, ce qui estself.__add__(2/1)
. - Maintenant,
other
est2/1
, qui est une fraction. - La méthode
add
est appelée 3 fois. - C1 est créé avec la valeur 1.
- x est remplacé par 1 à la place de -1 pour trouver le max.
- C2 n'a pas de paramètre, donc x=10 est pris par automatisme.
- 10 est supérieur à 1, donc -1 x est remplacé par 10.
- L'appel à
get_x
affiche la valeur dex
, soit 10. - Deux objets de type
MaClasse
sont créés avec des attributsx= 1
etx=2
. - Une liste contenant les adresses est créée.
- L'opération effectue une copie superficielle, créant une autre liste avec les mêmes adresses.
- L'objet
x=4
est ajouté à la fin de la liste. L.x
fait que le premier élément devient 0, ainsi la liste affiche[0,2]
.
L'héritage: concepts
- Les objets d'une même classe partagent les mêmes attributs et méthodes, mais ont des valeurs différentes pour les attributs.
- Des objets peuvent partager des points communs tout en ayant des différences dans certains attributs et méthodes.
- Les points communs sont factorisés et les différences explicitées.
- On spécifie les points communs (super catégorie) et les différences (sous-catégorie).
- Ceci permet de regrouper un comportement commun avec des spécificités, créant une notion d'héritage.
- Exemples :
- Figures géométriques : Figure → Polygone → Quadrilatère → Rectangle → Carré
- Individus : Individu → Membre UNIL → Étudiant_e UNIL
La programmation objet
- Une classe peut être une sous-classe d'une autre (super-classe).
- Les termes "classe enfant/parent" ou "classe fille/mère" sont aussi utilisés.
- La classe enfant étend la classe parent et hérite de sa structure et de son comportement (attributs et méthodes).
- La classe fille peut définir de nouveaux attributs et méthodes ou redéfinir ceux de la classe mère (override).
- Les méthodes
__str__
et__eq__
peuvent être redéfinies avec un nouveau comportement.
La construction de l'héritage
- Déclarer l'héritage lors de la définition d'une classe en mettant la classe mère entre parenthèses.
- L'adaptation se fait en appelant la classe mère.
- Il faut souvent faire appel au constructeur de la classe parent.
- La classe parent est accessible via la fonction
super()
. - Un objet d'une sous-classe est une instance de sa propre classe et de la classe parent.
o.__class__
renvoie à la classe concrète.isinstance()
renvoieTrue
pour les deux classes.
- Utiliser
super
évite de dupliquer le code. - Les attributs/méthodes privés déclarés dans la classe mère ne sont pas visibles dans la classe fille.
- Attributs privés (
__x
) sont visibles uniquement dans la classe où ils sont définis. - Attributs protégés (
_x
) sont visibles dans la classe où ils sont définis et dans ses classes filles. - Attributs publics (
x
) sont visibles partout.
- Attributs privés (
Comment redéfinir l'héritage
- Les méthodes de la classe parent peuvent être redéfinies.
- On peut réutiliser la méthode de la classe parent avec
super()
. super().__str__()
permet d'appeler la méthode__str__
de la classe parent.- Utiliser directement
self.__class__.__nom__
appelle la classe de l'objet. - Le décorateur
@override
(du moduletyping
) peut aider à identifier les erreurs.
Les niveaux d'héritage
- L'héritage peut être vertical (extension d'une classe déjà étendue) ou horizontal (extension de plusieurs classes).
- L'héritage horizontal crée des classes sœurs.
Méthodologie des niveaux d'héritage
- Définir les attributs et les classes le plus haut possible dans la hiérarchie.
- Si un comportement est commun à la plupart des classes enfants, implémenter dans la classe parent et redéfinir dans les classes ayant un comportement différent.
Les classes abstraites
- Une méthode abstraite ne peut pas être exécutée car elle n'est pas implémentée.
- L'exception
NotImplementedError
est levée pour créer une méthode abstraite. - Une classe abstraite a au moins une méthode abstraite et ne peut pas être instanciée.
- Objectifs : définir des comportements communs et garantir qu'une méthode existe en forçant les classes enfants à l'implémenter.
- Le module
abc
contient la classeABC
et le décorateurabstractmethod
pour définir ces classes (plus robuste queraise NotImplementedError
). - Le décorateur
@abstractmethod
peut être combiné avec@classmethod
et@staticmethod
. - Attention à l'ordre des décorateurs :
@abstractmethod
doit être mis en premier.
Les interfaces
- Une interface est une classe abstraite dont toutes les méthodes sont abstraites.
- Une interface est un contrat ou un cahier des charges.
L'héritage multiple
- Une classe peut étendre plusieurs classes et est une classe fille de plusieurs classes.
- Méthodes et attributs sont recherchés en parcourant les classes parents dans un certain ordre (MRO, method resolution order).
- Pour le constructeur, utiliser
super()
ou les noms de classe explicitement. - Conseil : étendre au plus une classe qui n'est pas une interface.
Le débogueur
- Le débogueur est un outil de PyCharm qui permet de parcourir le programme pas à pas.
- Il faut placer un point d'arrêt et le programme s'exécute jusqu'à ce point.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.