Détails
Quelles sont les différences entre type() et isinstance() ?
Quelles sont les différences entre ces deux fragments de code ?
Utilisation de type()
:
import types
if type(a) is types.DictType:
do_something()
if type(b) in types.StringTypes:
do_something_else()
En utilisant isinstance()
:
if isinstance(a, dict):
do_something()
if isinstance(b, str) or isinstance(b, unicode):
do_something_else()
1153
3
Voici un exemple où
isinstance
réalise quelque chose quetype
ne peut pas faire :dans ce cas, l'objet camion est un Véhicule, mais vous obtiendrez ceci :
En d'autres termes,
isinstance
est vrai pour les sous-classes, aussi.Voir aussi :
Cette dernière solution est préférable, car elle permet de gérer correctement les sous-classes. En fait, votre exemple peut être écrit encore plus facilement car le second paramètre de
isinstance()
peut être un tuple :ou, en utilisant la classe abstraite
basestring
:Selon la documentation python, voici une déclaration :
Ainsi,
isinstance()
doit être préféré àtype()
.