Comment vérifier si une classe est une sous-classe d'une autre en Python

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à vérifier si une classe est une sous-classe d'une autre classe en Python. Cela implique d'explorer l'héritage de classe, un concept fondamental en programmation orientée objet.

Vous commencerez par créer une classe mère Animal avec un constructeur et une méthode speak. Ensuite, vous créerez des classes filles Dog et Cat qui héritent de Animal et qui redéfinissent la méthode speak. Enfin, vous apprendrez à utiliser la fonction issubclass() et à inspecter l'attribut __bases__ pour déterminer les relations de sous-classe.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/ObjectOrientedProgrammingGroup -.-> python/inheritance("Inheritance") subgraph Lab Skills python/build_in_functions -.-> lab-559501{{"Comment vérifier si une classe est une sous-classe d'une autre en Python"}} python/classes_objects -.-> lab-559501{{"Comment vérifier si une classe est une sous-classe d'une autre en Python"}} python/inheritance -.-> lab-559501{{"Comment vérifier si une classe est une sous-classe d'une autre en Python"}} end

Explorer l'héritage de classe

Dans cette étape, vous apprendrez sur l'héritage de classe, un concept fondamental en programmation orientée objet (OOP - Programmation Orientée Objet). L'héritage vous permet de créer de nouvelles classes (classes filles) qui héritent d'attributs et de méthodes de classes existantes (classes mères). Cela favorise la réutilisation du code et aide à construire un code plus organisé et maintenable.

Commençons par créer une simple classe mère appelée Animal :

## Create a file named animal.py in the ~/project directory
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        print("Generic animal sound")

Ouvrez votre éditeur VS Code et créez un nouveau fichier nommé animal.py dans le répertoire ~/project. Copiez et collez le code ci-dessus dans le fichier. Cette classe a une méthode __init__ (constructeur) qui initialise l'attribut name et une méthode speak qui affiche un son générique d'animal.

Maintenant, créons une classe fille appelée Dog qui hérite de la classe Animal :

## Add the following code to animal.py
class Dog(Animal):
    def speak(self):
        print("Woof!")

Ajoutez le code ci-dessus au fichier animal.py. La classe Dog hérite de Animal en spécifiant Animal entre parenthèses après le nom de la classe. La classe Dog redéfinit également la méthode speak pour fournir sa propre implémentation spécifique.

Ensuite, créons une autre classe fille appelée Cat qui hérite également de la classe Animal :

## Add the following code to animal.py
class Cat(Animal):
    def speak(self):
        print("Meow!")

Ajoutez le code ci-dessus au fichier animal.py. La classe Cat hérite également de Animal et redéfinit la méthode speak.

Maintenant, créons un programme principal pour utiliser ces classes :

## Create a file named main.py in the ~/project directory
from animal import Animal, Dog, Cat

animal = Animal("Generic Animal")
dog = Dog("Buddy")
cat = Cat("Whiskers")

animal.speak()
dog.speak()
cat.speak()

Créez un nouveau fichier nommé main.py dans le répertoire ~/project et copiez et collez le code ci-dessus dans le fichier. Ce programme importe les classes Animal, Dog et Cat du fichier animal.py. Il crée ensuite des instances de chaque classe et appelle leurs méthodes speak.

Pour exécuter le programme, ouvrez votre terminal dans VS Code et naviguez jusqu'au répertoire ~/project :

cd ~/project

Ensuite, exécutez le script main.py en utilisant la commande python :

python main.py

Vous devriez voir la sortie suivante :

Generic animal sound
Woof!
Meow!

Cela démontre comment les classes Dog et Cat héritent de la classe Animal et fournissent leurs propres implémentations spécifiques de la méthode speak. Ceci est un exemple de base d'héritage de classe en Python.

Utiliser la fonction issubclass()

Dans cette étape, vous apprendrez à utiliser la fonction issubclass() pour vérifier si une classe est une sous-classe d'une autre classe. Cette fonction est une fonction intégrée à Python qui renvoie True si le premier argument est une sous-classe du deuxième argument, et False dans le cas contraire.

En continuant avec l'exemple de l'étape précédente, utilisons la fonction issubclass() pour vérifier les relations entre les classes Animal, Dog et Cat.

Ouvrez votre éditeur VS Code et créez un nouveau fichier nommé issubclass_example.py dans le répertoire ~/project. Copiez et collez le code suivant dans le fichier :

## Create a file named issubclass_example.py in the ~/project directory
from animal import Animal, Dog, Cat

print(issubclass(Dog, Animal))
print(issubclass(Cat, Animal))
print(issubclass(Dog, Cat))
print(issubclass(Animal, Dog))
print(issubclass(Animal, Animal))

Ce programme importe les classes Animal, Dog et Cat du fichier animal.py que vous avez créé à l'étape précédente. Il utilise ensuite la fonction issubclass() pour vérifier les relations suivantes :

  • Dog est-il une sous-classe de Animal ?
  • Cat est-il une sous-classe de Animal ?
  • Dog est-il une sous-classe de Cat ?
  • Animal est-il une sous-classe de Dog ?
  • Animal est-il une sous-classe de lui-même ?

Pour exécuter le programme, ouvrez votre terminal dans VS Code et naviguez jusqu'au répertoire ~/project :

cd ~/project

Ensuite, exécutez le script issubclass_example.py en utilisant la commande python :

python issubclass_example.py

Vous devriez voir la sortie suivante :

True
True
False
False
True

Cette sortie montre que :

  • Dog est une sous-classe de Animal (True)
  • Cat est une sous-classe de Animal (True)
  • Dog n'est pas une sous-classe de Cat (False)
  • Animal n'est pas une sous-classe de Dog (False)
  • Animal est une sous-classe de lui-même (True)

La fonction issubclass() est utile pour vérifier les relations d'héritage entre les classes de votre code. Cela peut être utile pour vous assurer que votre code se comporte comme prévu et pour écrire un code plus robuste et maintenable.

Inspecter l'attribut bases

Dans cette étape, vous apprendrez à inspecter l'attribut __bases__ d'une classe pour trouver ses classes mères directes. L'attribut __bases__ est un tuple qui contient les classes mères d'une classe.

En continuant avec l'exemple des étapes précédentes, inspectons l'attribut __bases__ des classes Animal, Dog et Cat.

Ouvrez votre éditeur VS Code et créez un nouveau fichier nommé bases_example.py dans le répertoire ~/project. Copiez et collez le code suivant dans le fichier :

## Create a file named bases_example.py in the ~/project directory
from animal import Animal, Dog, Cat

print(Dog.__bases__)
print(Cat.__bases__)
print(Animal.__bases__)

Ce programme importe les classes Animal, Dog et Cat du fichier animal.py que vous avez créé dans les étapes précédentes. Il affiche ensuite l'attribut __bases__ de chaque classe.

Pour exécuter le programme, ouvrez votre terminal dans VS Code et naviguez jusqu'au répertoire ~/project :

cd ~/project

Ensuite, exécutez le script bases_example.py en utilisant la commande python :

python bases_example.py

Vous devriez voir la sortie suivante :

(<class 'animal.Animal'>,)
(<class 'animal.Animal'>,)
(<class 'object'>,)

Cette sortie montre que :

  • La classe Dog hérite de la classe Animal.
  • La classe Cat hérite de la classe Animal.
  • La classe Animal hérite de la classe object, qui est la classe de base de toutes les classes en Python.

L'attribut __bases__ est utile pour comprendre la hiérarchie d'héritage de vos classes. Cela peut être utile pour le débogage et pour écrire un code plus maintenable.

Résumé

Dans ce laboratoire (lab), vous avez exploré l'héritage de classe en Python, un concept clé de la programmation orientée objet. Vous avez créé une classe mère Animal avec un constructeur et une méthode speak, puis vous avez défini des classes filles Dog et Cat qui héritent de Animal.

Ces classes filles ont remplacé (override) la méthode speak pour fournir leurs propres implémentations spécifiques, démontrant ainsi comment l'héritage permet la réutilisation et la spécialisation du code. Enfin, vous avez créé des instances de ces classes et appelé leurs méthodes speak pour observer les différentes sorties.