Comment déterminer le type d'un objet en Python ?

Comment déterminer le type d'un objet en Python ? Deux fonctions Python permettent de retourner le type d'un objet. Elles prennent en charge tous les types de base du langage mais aussi les types personnalisés. Elles gèrent néanmoins différemment l'héritage de ces derniers.

Le langage Python est un langage typé dynamiquement : les variables ne sont pas typées à l'avance, leur type est défini en fonction de la valeur qu'elles contiennent. Il est possible de déterminer le type d'un objet grâce à deux fonctions différentes. Bien qu'elles aient un fonctionnement similaire pour les types de base, elles diffèrent dans la gestion des types personnalisés.

La fonction type() retourne le type d'un objet. Elle gère tous les types de base du langage Python mais également les types personnalisés que vous avez créés dans votre programme.

>>> type(1)
<type 'int'>
>>> type(Coucou)
<type 'str'>
>>> type({})
<type 'dict'>
>>> type([])
<type 'list'>

La fonction isinstance() fonctionne différemment. Elle prend en premier argument la variable et en deuxième argument le type à tester et retourne true si la variable est bien de ce type. Il est possible de faire la même chose avec le mot-clé is et la fonction type. La fonction isinstance() accepte également en deuxième argument un tuple de type et retourne true si la variable appartient à l'un des types.

>>> isinstance(1, int)
true
>>> type(1) is int
true
>>> isinstance(Coucou, (int, str))
True

La différence entre ces deux fonctions est dans la gestion de l'héritage pour les types personnalisés. La fonction type() ne considère que le type immédiat de l'objet alors que la fonction isinstance() prend en compte l'héritage.

>>> class maClasse (object):
 pass
>>> class maClasseEnfant (maClasse):
 pass
>>> objet1 = maClasse();
>>> objet2 = maClasseEnfant();
>>> type(objet1) is maClasse
true
>>> type(objet2) is maClasse
false
>>> isintance(objet1, maClasse)
true
>>> isintance(objet2, maClasse)
True

Python