Comment vérifier le type de données en Python (type vs isinstance)
Découvrez comment vérifier les types de données en Python. Comprenez quand utiliser type() vs isinstance(), gérez les classes personnalisées et écrivez des validations de vérification de type sécurisées.
Aperçu
Python est un langage typé dynamiquement, ce qui signifie que les variables peuvent contenir des valeurs de n'importe quel type de données et que leur type peut changer pendant l'exécution. Bien que cette flexibilité accélère le développement initial, elle vous oblige également à vérifier les types de variables au moment de l'exécution avant d'exécuter des opérations spécifiques au type, telles que l'exécution d'opérations arithmétiques sur des entiers ou l'appel de méthodes de chaîne.
Pour vérifier le type de données d'un objet, Python fournit deux fonctions principales : `type()` et `isinstance()`. La fonction `type(obj)` renvoie le type de classe précis de l'objet. Bien que vous puissiez utiliser `type(obj) == int` pour vérifier si un nombre est un entier, cette méthode est généralement déconseillée car elle ne prend pas en charge les structures d'héritage (une sous-classe d'un entier serait évaluée à `False`).
La manière pythonique recommandée pour vérifier les types est `isinstance(obj, class_info)`. Cette fonction vérifie si un objet est une instance de la classe spécifiée ou de toute sous-classe héritée de celle-ci. Il prend également en charge la vérification par rapport à un tuple de classes (par exemple, `isinstance(value, (int, float))`), ce qui rend le code de validation très flexible et robuste.
Sortie de code et d'exécution
Ce script montre la vérification des types de variables à l'aide de type() et isinstance(), montrant les différences d'héritage.
value_int = 42
value_str = "hello"
# 1. Checking type using isinstance() (Recommended)
is_number = isinstance(value_int, int)
print(f"Is {value_int} an int? {is_number}")
# Checking against multiple possible types
is_num_or_str = isinstance(value_str, (int, float, str))
print(f"Is '{value_str}' int, float, or str? {is_num_or_str}")
# 2. Checking type using type() (For exact class matches)
print(f"Exact type of value_int: {type(value_int).__name__}")
print("Is value_int exactly an int?", type(value_int) is int)
# 3. Inheritance difference
class CustomList(list):
pass
my_list = CustomList([1, 2, 3])
print("\nInheritance testing:")
print("isinstance(my_list, list):", isinstance(my_list, list))
print("type(my_list) is list:", type(my_list) is list)Is 42 an int? True
Is 'hello' int, float, or str? True
Exact type of value_int: int
Is value_int exactly an int? True
Inheritance testing:
isinstance(my_list, list): True
type(my_list) is list: FalseMise en œuvre étape par étape
- Utilisez isinstance(variable, type_name) pour la vérification générale du type (conforme à l'héritage).
- Transmettez un tuple de types comme isinstance(variable, (int, float)) pour vérifier plusieurs classes.
- Utilisez type(variable) is type_name uniquement lorsque vous devez garantir la correspondance exacte de la classe, en ignorant les sous-classes.
Foire aux questions
Pourquoi isinstance() est-il préféré à type() ?
isinstance() prend en charge l'héritage d'objets et le polymorphisme. Si vous sous-classez un type intégré, isinstance() le reconnaîtra correctement comme une instance de la classe parent, tandis que type() sera évalué à False.
Comment puis-je vérifier si un objet est appelable (comme une fonction) ?
Utilisez la fonction callable() intégrée, qui renvoie True si l'objet peut être invoqué comme une fonction.
Sujets connexes
Apprenez à créer une classe en Python. Maîtrisez le constructeur __init__, les méthodes d'instance, le mot-clé self et l'instanciation d'objet.
Comment gérer les exceptions en PythonApprenez à gérer les exceptions en Python à l’aide des blocs try, except, else et enfin. Écrivez du code Python sans erreur et résistant aux plantages.
Ressources Python recommandées
Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.
Conseils de type Python
Apprenez à écrire des astuces de type en Python. Améliorez la qualité du code, activez la saisie semi-automatique et exploitez mypy pour l'analyse statique du code.
Aide-mémoire sur les conversions de types Python
Apprenez les conversions de types implicites et explicites en Python. Convertissez entre des chaînes, des entiers, des flottants, des listes, des ensembles et des dictionnaires.
Python vs TypeScript : scripts dynamiques vs Web Type-Safe
Comparez Python et TypeScript. Découvrez les systèmes de types structurels, les métadonnées du décorateur, les vérifications du compilateur, les environnements d'exécution Web et les outils de développement.