Programmation python 5

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

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?

  • 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())

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)

  • [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.

<p>False (B)</p> Signup and view all the answers

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 ______.

<p>héritage</p> Signup and view all the answers

Quelle méthode Python est utilisée pour appeler le constructeur de la classe parent à partir de la classe enfant ?

<p>super() (B)</p> Signup and view all the answers

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.

<p>True (A)</p> Signup and view all the answers

Comment déclare-t-on une méthode abstraite en Python en utilisant le module abc ?

<p>Avec le décorateur <code>@abstractmethod</code></p> Signup and view all the answers

Dans le contexte de l'héritage multiple en Python, que signifie MRO ?

<p>Method Resolution Order (A)</p> Signup and view all the answers

L'outil qui permet de parcourir un programme pas à pas dans PyCharm est le ______.

<p>débogueur</p> Signup and view all the answers

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?

<p>3 (D)</p> Signup and view all the answers

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())

<p>10</p> Signup and view all the answers

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)

<p>[1, 2] (C)</p> Signup and view all the answers

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.

<p>False (B)</p> Signup and view all the answers

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 ______.

<p>super()</p> Signup and view all the answers

Quelle est la principale utilité de l'utilisation de la fonction super() dans le contexte de l'héritage en programmation orientée objet?

<p>Éviter de dupliquer le code déjà inscrit dans la classe mère et assurer une initialisation correcte des attributs hérités. (C)</p> Signup and view all the answers

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.

<p>False (B)</p> Signup and view all the answers

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:

<p>MembreUNIL = get_nom() EtudiantUNIL = is_paid() ProfesseurUNIL = département</p> Signup and view all the answers

Dans le contexte des classes abstraites, quel est le but de lever une exception NotImplementedError dans une méthode?

<p>Indiquer que la méthode doit être implémentée par les classes enfants.</p> Signup and view all the answers

Le module Python qui fournit une base pour définir des classes abstraites est le module ______.

<p>abc</p> Signup and view all the answers

Combien de fois la méthode _add_ est-elle appelée lors de l'exécution de l'instruction f1 + 2.0?

<p>3 (B)</p> Signup and view all the answers

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())

<p>10 (B)</p> Signup and view all the answers

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)

<p>[1, 2] (D)</p> Signup and view all the answers

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.

<p>False (B)</p> Signup and view all the answers

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?

<p>redéfinition (override)</p> Signup and view all the answers

Pour réutiliser la méthode de la classe parent dans une classe enfant, on utilise la fonction ______.

<p>super()</p> Signup and view all the answers

Dans une hiérarchie de classes, où est-il préférable de définir les attributs pour réduire la redondance de code?

<p>Dans les classes les plus hautes de la hiérarchie. (B)</p> Signup and view all the answers

Une classe abstraite peut être instanciée directement.

<p>False (B)</p> Signup and view all the answers

Quel module en Python est utilisé pour définir des classes abstraites?

<p>abc</p> Signup and view all the answers

Associez les éléments suivants relatifs à l'héritage multiple :

<p>MRO (Method Resolution Order) = Ordre dans lequel les classes parentes sont parcourues pour la résolution des méthodes. Classe CouteauSuisse = Exemple d'une classe concrète utilisant l'héritage multiple. Étend plusieurs classes = Une classe fille peut hériter des attributs et des méthodes de plusieurs classes mères.</p> Signup and view all the answers

Flashcards

Classe fille

Une classe qui hérite les attributs et méthodes d'une autre classe.

Déclaration d'héritage

Déclarer la classe mère lors de la définition d'une nouvelle classe.

Fonction super()

Fonction qui permet d'accéder au constructeur de la classe parent.

Attributs privés (__x)

Attributs/méthodes ne sont pas accessibles dans la classe fille.

Signup and view all the flashcards

Attributs protégés (_x)

Attributs/méthodes visibles dans la classe où il est défini et ses classes filles.

Signup and view all the flashcards

Redéfinir l'héritage

Modifier une méthode héritée de la classe parent.

Signup and view all the flashcards

super()

Mot-clé pour réutiliser une méthode de la classe parent.

Signup and view all the flashcards

@override

Un décorateur pour vérifier si une méthode redéfinit correctement une méthode de la classe parent.

Signup and view all the flashcards

Méthode abstraite

Une méthode qui ne peut pas être exécutée car elle n'est pas implémentée.

Signup and view all the flashcards

Classe abstraite

Classe qui a au moins une méthode abstraite et donc ne peut pas être instanciée.

Signup and view all the flashcards

F1 + 2.0

Traduction d'un appel de méthode sur un objet.

Signup and view all the flashcards

Objets d'une même classe

Objet partageant attributs/méthodes mais avec valeurs différentes.

Signup and view all the flashcards

Héritage

Factoriser points communs et spécifier les différences de classes.

Signup and view all the flashcards

Sous-classe

Classe définie comme une spécialisation d'une autre classe.

Signup and view all the flashcards

Classe enfant

Une classe qui étend une autre classe.

Signup and view all the flashcards

Héritage multiple

Hiérarchie de classes où une classe hérite de plusieurs autres.

Signup and view all the flashcards

Interface

Classe abstraite dont toutes les méthodes sont abstraites.

Signup and view all the flashcards

Le débogueur

Petite bête verte dans PyCharm, permet de parcourir un programme pas à pas.

Signup and view all the flashcards

Héritage (Définition)

Les attributs et méthodes que la classe enfant reçoit de la classe parent.

Signup and view all the flashcards

Classe parent

Une classe qui sert de base à d'autres classes, définissant des propriétés et comportements communs.

Signup and view all the flashcards

Module abc

Module Python contenant la classe ABC et le décorateur abstractmethod pour définir des classes abstraites.

Signup and view all the flashcards

Niveaux d'héritage

Définir les attributs et les classes le plus haut possible dans la hiérarchie

Signup and view all the flashcards

MRO

L’ordre dans lequel Python recherche les méthodes héritées dans les classes parents.

Signup and view all the flashcards

Study Notes

Quiz

  • L'instruction F1 + 2.0 appelle la méthode _add_ sur f1, soit f1.__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 devient 2, qui est un int.
  • La boucle appelle self + Fraction(2), ce qui est self.__add__(2/1).
  • Maintenant, other est 2/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 de x, soit 10.
  • Deux objets de type MaClasse sont créés avec des attributs x= 1 et x=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() renvoie True 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.

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 module typing) 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 classe ABC et le décorateur abstractmethod pour définir ces classes (plus robuste que raise 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.

Quiz Team

Related Documents

More Like This

Python Classes Overview
8 questions
Python Objects and Classes Quiz
3 questions
Classes and Objects in Python
10 questions

Classes and Objects in Python

TrustingEvergreenForest2650 avatar
TrustingEvergreenForest2650
Use Quizgecko on...
Browser
Browser