Skip to content

Obtenir et vérifier le type d’un objet en Python : type(), isinstance()

En Python, vous pouvez obtenir, imprimer et vérifier le type d’un objet (variable et littéral) avec les fonctions intégrées type() et isinstance().

Cet article décrit le contenu suivant.

  • Obtenir et imprimer le type d’un objet :type()
  • Vérifiez le type d’un objet :type(), isinstance()
    • Avec type()
    • Avec estinstance()
    • La différence entre type() et isinstance()


Obtenir et imprimer le type d’un objet :type()

type() renvoie le type d’un objet. Vous pouvez l’utiliser pour obtenir et imprimer le type d’une variable et un littéral comme typeof dans d’autres langages de programmation.

print(type('string'))
# <class 'str'>

print(type(100))
# <class 'int'>

print(type([0, 1, 2]))
# <class 'list'>

La valeur de retour de type() est un objet de type tel que str ou int.

print(type(type('string')))
# <class 'type'>

print(type(str))
# <class 'type'>

Vérifiez le type d’un objet :type(), isinstance()

Utilisez type() ou isinstance() pour vérifier si un objet est d’un type spécifique.

Avec type()

En comparant la valeur de retour de type() avec n’importe quel type, vous pouvez vérifier si l’objet est de ce type.

print(type('string') is str)
# True

print(type('string') is int)
# False
def is_str(v):
    return type(v) is str

print(is_str('string'))
# True

print(is_str(100))
# False

print(is_str([0, 1, 2]))
# False

Si vous voulez vérifier s’il s’agit d’un type parmi plusieurs, utilisez in et plusieurs types de tuples.

def is_str_or_int(v):
    return type(v) in (str, int)

print(is_str_or_int('string'))
# True

print(is_str_or_int(100))
# True

print(is_str_or_int([0, 1, 2]))
# False

Il est également possible de définir des fonctions qui modifient les opérations en fonction du type.

def type_condition(v):
    if type(v) is str:
        print('type is str')
    elif type(v) is int:
        print('type is int')
    else:
        print('type is not str or int')

type_condition('string')
# type is str

type_condition(100)
# type is int

type_condition([0, 1, 2])
# type is not str or int

Avec estinstance()

isinstance(object, type) renvoie True si le premier objet argument est une instance du second type argument ou une instance d’une sous-classe de type.

Vous pouvez utiliser un tuple comme deuxième argument. Renvoie True s’il s’agit d’une instance de n’importe quel type.

print(isinstance('string', str))
# True

print(isinstance(100, str))
# False

print(isinstance(100, (int, str)))
# True

Des fonctions similaires aux exemples ci-dessus utilisant type() peuvent être écrites comme suit :

def is_str(v):
    return isinstance(v, str)

print(is_str('string'))
# True

print(is_str(100))
# False

print(is_str([0, 1, 2]))
# False
def is_str_or_int(v):
    return isinstance(v, (int, str))

print(is_str_or_int('string'))
# True

print(is_str_or_int(100))
# True

print(is_str_or_int([0, 1, 2]))
# False
def type_condition(v):
    if isinstance(v, str):
        print('type is str')
    elif isinstance(v, int):
        print('type is int')
    else:
        print('type is not str or int')

type_condition('string')
# type is str

type_condition(100)
# type is int

type_condition([0, 1, 2])
# type is not str or int

La différence entre type() et isinstance()

La différence entre type() et isinstance() est que isinstance() renvoie True même pour les instances de sous-classes qui héritent de la classe spécifiée dans le deuxième argument.

Par exemple, définissez la superclasse (classe de base) et la sous-classe (classe dérivée) suivantes.

class Base:
    pass

class Derive(Base):
    pass

base = Base()
print(type(base))
# <class '__main__.Base'>

derive = Derive()
print(type(derive))
# <class '__main__.Derive'>

type() renvoie True uniquement lorsque les types correspondent, mais isinstance() renvoie True également pour la superclasse.

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

Par exemple, le type booléen bool (True, False) est une sous-classe de int. isinstance() renvoie True pour int et bool pour un objet de bool.

print(type(True))
# <class 'bool'>

print(type(True) is bool)
# True

print(type(True) is int)
# False

print(isinstance(True, bool))
# True

print(isinstance(True, int))
# True

Utilisez type() si vous voulez vérifier le type exact, et isinstance() si vous voulez vérifier en tenant compte de l’héritage.

Une fonction intégrée issubclass() vérifie si une classe est une sous-classe d’une autre classe.

print(issubclass(bool, int))
# True

print(issubclass(bool, float))
# False