Python / type() / Vérifier le type d’une valeur
En Python, type(value) renvoie l’objet type réel d’une valeur, pas une chaîne comme "int". Pour une comparaison exacte, utilisez type(value) is int. Pour une vérification ordinaire qui accepte les sous-classes, préférez isinstance().
Utilisation et objet renvoyé
Avec un argument, type() renvoie le type de cet objet. Les types sont eux-mêmes des objets, comme les nombres, chaînes et collections. Le shell interactif affiche le résultat des expressions ; dans un script, utilisez print() ou un autre affichage.
Les exemples fonctionnent avec Python 3.12. Enregistrez chaque code complet en UTF-8 dans type_example.py et lancez python type_example.py, ou python3 selon votre installation. Remplacez le contenu pour des essais indépendants.
values = (123, 12.3, "abc", [1, 2], (1, 2), {"a": 1}, {1, 2}, 1 + 2j, True, None)
for value in values:
print(type(value))
Résultat attendu :
<class 'int'>
<class 'float'>
<class 'str'>
<class 'list'>
<class 'tuple'>
<class 'dict'>
<class 'set'>
<class 'complex'>
<class 'bool'>
<class 'NoneType'>
<class 'int'> représente l’objet type entier. Le comparer à une chaîne ne vérifie pas le type. __name__ fournit une étiquette lisible, mais différentes classes peuvent partager un nom : utilisez les objets types pour décider.
kind = type(123)
print(kind is int)
print(kind == "int")
print(kind.__name__)
True
False
int
La forme à trois arguments type(name, bases, dict) crée une nouvelle classe. Distinguez cet usage de l’inspection à un argument.
Comparaison exacte et isinstance()
type(value) is T exige précisément le type T. isinstance(value, T) accepte aussi les sous-classes et convient à l’héritage. L’exemple complet définit Dog comme sous-classe d’Animal et compare également des types numériques.
class Animal:
pass
class Dog(Animal):
pass
pet = Dog()
print(type(pet).__name__)
print(type(pet) is Animal)
print(isinstance(pet, Animal))
print(type(True) is int)
print(isinstance(True, int))
print(isinstance(3, (int, float)))
Dog
False
True
False
True
True
Le type réel d’un Dog est Dog, mais c’est une instance d’Animal. De même, bool est une sous-classe de int, donc isinstance(True, int) est vrai. Si une quantité doit refuser les booléens, exigez exactement int ou excluez bool séparément. Un tuple de types autorise plusieurs possibilités.
Réaffecter une variable à un autre type
Pour comprendre les objets et types Python, distinguez un nom de l’objet qu’il référence. Affecter une chaîne au même nom ne transforme pas l’ancien objet entier en chaîne.
value = 123
original = value
print(type(value).__name__)
value = "123"
print(type(value).__name__)
print(type(original).__name__)
int
str
int
Au départ, les deux noms désignent le même entier. Après value = "123", value désigne une chaîne et original garde l’entier. Cette nouvelle liaison diffère d’une conversion par int() ou str().
Type du conteneur, contenu et annotations
type(values) ne vérifie pas le type de chaque élément. Une annotation de type comme list[int] n’impose pas au moteur Python de valider ou convertir les éléments automatiquement.
values: list[int] = [1, "2"]
print(type(values).__name__)
print(all(type(item) is int for item in values))
try:
print(isinstance(values, list[int]))
except TypeError:
print("TypeError")
list
False
TypeError
Une liste contenant la chaîne "2" peut exister malgré l’annotation int. La vérification exacte de chaque élément est fausse. Utiliser list[int] comme second argument de isinstance() provoque TypeError. Séparez contrôle du conteneur et schéma interne, et exploitez aussi un vérificateur statique de types.
Vérifier None et les conditions sur la valeur
None est un objet distinct représentant l’absence ; value is None est une vérification claire. Un type correct ne garantit pas une valeur métier valide. Cette fonction accepte les entiers exacts positifs ou nuls et exclut bool.
value = None
print(value is None)
print(type(value).__name__)
def valid_count(value):
return type(value) is int and value >= 0
for value in (3, -1, True, "3", None):
print(repr(value), valid_count(value))
True
NoneType
3 True
-1 False
True False
'3' False
None False
and saute la comparaison si le type est incorrect, évitant >= 0 sur une chaîne ou None. En revanche, -1 est entier mais échoue sur la valeur. Choisissez conversion ou restriction de types, puis ajoutez plage, valeurs manquantes et conditions de format.




