À quoi sert la fonction issubclass ?

issubclass permet de vérifier si une classe est une sous-classe d'une autre. C'est-à-dire si elle hérite directement ou indirectement d'une autre classe.

Attention

Attention à ne pas confondre issubclass et isinstance. Nous reviendrons sur cette différence par la suite.

D'ailleurs, n'hésitez à pas lire ou relire notre glossaire sur la fonction isinstance.

Syntaxe

La fonction issubclass prend deux arguments :

issubclass(classe, classe_ou_tuple_de_classes)
PYTHON
  • classe : La classe à vérifier

  • classe_ou_tuple_de_classes : Une classe ou un tuple de classes avec lesquelles on compare la première classe

La fonction retourne True si classe est une sous-classe de classe_ou_tuple_de_classes, False dans le cas contraire.

Utilisation de base

Prenons un exemple simple d'héritage multiple :

class Animal:
    pass

class Chien(Animal):
    pass

class ChienDeChasse(Chien):
    pass

class Reptile:
    pass

# Chien est bien une sous-classe d'Animal
print(issubclass(Chien, Animal))
# Résultat : True

# ChienDeChasse est une sous-classe de Chien
print(issubclass(ChienDeChasse, Animal))
# Résultat : True

# En revanche, Animal n'est PAS une sous-classe de Chien
print(issubclass(Animal, Chien))
# Résultat : False

# Chien et Reptile n'ont pas de lien de parenté
print(issubclass(Chien, Reptile))
# Résultat : False
PYTHON
Un instant

À noter

Une classe est considérée comme une sous-classe d'elle-même.

class Animal:
    pass

# Une classe est une sous-classe d'elle-même
print(issubclass(Animal, Animal))  # True
PYTHON
Un instant

Vérifier avec un tuple

Comme évoqué précédemment, nous pouvons passer un tuple de classes en deuxième argument à la fonction issubclass :

class Vehicule:
    pass
class Voiture(Vehicule):
    pass
class Bateau:
    pass

# On vérifie si Voiture est une sous-classe de Bateau OU de Vehicule
print(issubclass(Voiture, (Bateau, Vehicule)))
# Résultat : True

# On vérifie si Bateau est une sous-classe de Vehicule OU de Voiture
print(issubclass(Bateau, (Vehicule, Voiture)))
# Résultat : False
PYTHON
Un instant

Dans ce cas, issubclass retourne True si la classe est une sous-classe d'au moins une des classes du tuple.

issubclass vs isinstance

On pourrait avoir tendance à confondre les deux fonctions. Imaginons deux classes A et B :

  • issubclass(A, B) vérifie si la classe A hérite directement ou indirectement de la classe B

  • isinstance(obj, B) vérifie si l'objet obj est une instance de la classe B ou l'une de ses sous-classes

Pour résumer : issubclass compare deux classes alors que isinstance compare un objet à une classe.

issubclass est donc pratique pour s'assurer qu'une classe fournie par un utilisateur respecte bien une interface, ou une hiérarchie de classes.

Bravo, tu es prêt à passer à la suite

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.