QCM Python – Partie 31

Bienvenue dans notre QCM Python ! Que vous soyez débutant ou déjà expérimenté en programmation, ce questionnaire à choix multiples est l’occasion parfaite de tester vos connaissances en Python. Grâce à des questions couvrant tous les niveaux, vous pourrez évaluer votre maîtrise des concepts clés du langage, comme les structures de données, les fonctions, les modules et bien plus. Si vous cherchez à améliorer vos compétences ou à vous préparer pour un examen, ce QCM Python est fait pour vous. Lancez-vous et découvrez où vous en êtes !
 
 

1. Quelle est la principale différence entre l’héritage et la composition en POO ?

A L’héritage est plus flexible que la composition

B L’héritage crée des objets de types différents, tandis que la composition crée des objets de même type

C L’héritage crée une relation « est un », tandis que la composition crée une relation « a un »

D L’héritage permet de réutiliser du code, mais la composition ne le permet pas

C
L’héritage permet de créer une hiérarchie entre les classes, avec une relation « est un » (par exemple, un chien « est un » animal). En revanche, la composition permet de définir une relation « a un » (par exemple, une voiture « a un » moteur).

 

 

2. Quel est le rôle de la méthode __del__ en Python ?

A Elle est appelée pour nettoyer les ressources quand un objet est supprimé

B Elle sert à initialiser un objet

C Elle est utilisée pour déclarer une méthode privée

D Elle permet de sérialiser un objet

A
La méthode __del__ est un destructeur qui est appelé lorsqu’un objet est détruit, généralement quand il n’y a plus de références vers cet objet. Elle peut être utilisée pour nettoyer des ressources, comme fermer des fichiers ou des connexions réseau.

 

 

3. Quelle méthode spéciale permet de définir la représentation sous forme de chaîne d’un objet en Python ?

A __repr__

B __str__

C __format__

D __display__

B
La méthode __str__ définit la façon dont un objet doit être converti en chaîne de caractères lorsque vous utilisez la fonction print() ou str(). Elle renvoie une chaîne lisible pour l’utilisateur. Exemple :

class Voiture:
    def __init__(self, marque, modèle):
        self.marque = marque
        self.modèle = modèle
    
    def __str__(self):
        return f"{self.marque} {self.modèle}"

ma_voiture = Voiture("Tesla", "Model S")
print(ma_voiture)  # Appelle __str__, affiche "Tesla Model S"

 

 
 

4. Quelle est la différence entre __str__ et __repr__ ?

A __str__ est destiné à une représentation lisible par l’utilisateur, tandis que __repr__ est destiné à une représentation non lisible.

B __str__ est destiné à des fins de débogage et __repr__ est destiné à l’affichage utilisateur.

C __str__ doit retourner une chaîne qui est lisible pour les développeurs, tandis que __repr__ doit retourner une chaîne compréhensible par l’utilisateur.

D __str__ est destiné à une représentation lisible par l’utilisateur, tandis que __repr__ doit retourner une chaîne qui, lorsqu’évaluée, crée un nouvel objet identique.

D
__str__ est utilisé pour l’affichage utilisateur, tandis que __repr__ est destiné à la représentation « officielle » de l’objet, souvent utilisée pour le débogage et permettant la reconstruction de l’objet. En général, __repr__ devrait retourner une chaîne qui, si elle est passée à eval(), recrée l’objet.

 

 

5. Quelle est la méthode appropriée pour rendre un attribut privé en Python ?

A Ajouter un double underscore au nom de l’attribut

B Utiliser le décorateur @private

C Utiliser un underscore simple au début du nom de l’attribut

D Ajouter un attribut protected à la classe

A
En Python, l’ajout de deux underscores (__) avant un nom d’attribut rend cet attribut privé, ce qui empêche l’accès direct à cet attribut depuis l’extérieur de la classe. Exemple :

class Personne:
    def __init__(self, nom):
        self.__nom = nom  # Attribut privé

personne = Personne("Jean")
# print(personne.__nom)  # Provoque une erreur

 

 

6. Que se passe-t-il si une méthode est redéfinie dans une sous-classe en Python ?

A La méthode de la classe parente est toujours appelée.

B La méthode de la classe parente est ignorée.

C Les deux méthodes (de la classe parente et de la sous-classe) sont exécutées successivement.

D Il faut appeler la méthode de la classe parente explicitement via super().

B
Lorsque vous redéfinissez une méthode dans une sous-classe, la méthode de la classe parente est ignorée, sauf si vous utilisez explicitement super() pour l’appeler. Exemple :

class Animal:
    def parler(self):
        print("L'animal parle")

class Chien(Animal):
    def parler(self):
        print("Woof!")

chien = Chien()
chien.parler()  # "Woof!", la méthode de la classe parente est ignorée

 

 
 

7. Quelle est la différence entre @classmethod et @staticmethod en Python ?

A @staticmethod peut accéder à l’état de l’instance, tandis que @classmethod n’y a pas accès.

B @classmethod prend un paramètre cls, tandis que @staticmethod ne prend aucun paramètre spécial.

C @classmethod permet de modifier l’état de l’instance, tandis que @staticmethod permet de modifier l’état de la classe.

D @classmethod est utilisé pour des méthodes privées, tandis que @staticmethod est utilisé pour des méthodes publiques.

B
@classmethod est utilisé pour des méthodes qui agissent sur la classe (et non sur l’instance), et elle prend un paramètre cls, qui représente la classe elle-même. @staticmethod ne prend aucun paramètre spécial comme self ou cls.

 

 

8. Quel est le principal problème de l’héritage multiple en Python ?

A Il est impossible d’hériter de plus d’une classe en Python.

B Les classes doivent être hiérarchisées dans un arbre binaire.

C Les classes multiples peuvent entraîner des conflits si plusieurs classes parentes définissent une méthode identique.

D L’héritage multiple ralentit les performances de l’application.

C
L’héritage multiple en Python peut poser des problèmes si deux classes parentes définissent une méthode identique, car cela peut provoquer un conflit dans le comportement de la classe fille. Cependant, Python utilise un mécanisme appelé « MRO » (Method Resolution Order) pour résoudre l’ordre d’appel des méthodes. Exemple :

class A:
    def parler(self):
        print("A parle")

class B:
    def parler(self):
        print("B parle")

class C(A, B):
    pass

c = C()
c.parler()  # Appelle la méthode de la classe A, car A est appelée avant B dans l'ordre de résolution

 

 

9. Quel est l’effet du mot-clé global dans une fonction ?

A Il permet d’accéder à des variables locales dans la fonction.

B Il permet de créer des variables locales dans une fonction.

C Il permet de modifier une variable globale depuis l’intérieur d’une fonction.

D Il empêche l’accès aux variables globales dans la fonction.

C
Le mot-clé global permet de déclarer qu’une variable est globale, ce qui permet de la modifier à l’intérieur d’une fonction.

 

 
 

10. Quel est le moyen d’accéder à un attribut privé dans une classe Python ?

A Il est impossible d’accéder à un attribut privé en dehors de la classe

B Accéder directement à l’attribut en utilisant son nom

C Utiliser des méthodes spéciales comme getattr`

D Utiliser un accent grave

C
En Python, il est possible de définir des attributs privés en utilisant un double underscore (ex : __attribut). Cependant, il n’est pas conseillé de les modifier directement. Si vous avez besoin d’accéder à un attribut privé, vous pouvez utiliser des méthodes comme __getattr__ ou des méthodes publiques pour contrôler l’accès. Exemple :

class Exemple:
    def __init__(self):
        self.__privé = 42
    
    def get_privé(self):
        return self.__privé

ex = Exemple()
print(ex.get_privé())  # Utilise une méthode publique pour accéder à un attribut privé

 

Exercice Python Corrigé

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *