
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