kzen.dev
  • Questions
  • Tags
  • Utilisateurs
Notifications
Récompenses
Inscription
Une fois inscrit, vous serez informé des réponses et des commentaires à vos questions.
Connectez-vous
Si vous avez déjà un compte, connectez-vous pour vérifier les nouvelles notifications.
Il y aura des récompenses pour les questions, réponses et commentaires ajoutés.
Détails
Source
Editer
 abbot
abbot
Question

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 2009-10-11T03:50:54+00:00 3
 TylerH
TylerH
Question modifiée 4 janvier 2018 в 10:09
Programmation
oop
python
types
inheritance
Cette question a 1 réponse en anglais, pour les lire connectez-vous à votre compte.
 Peter
Peter
11 octobre 2009 в 3:58
2009-10-11T03:58:54+00:00
Détails
Source
Editer
#9566194

Voici un exemple où isinstance réalise quelque chose que type ne peut pas faire :

class Vehicle:
    pass

class Truck(Vehicle):
    pass

dans ce cas, l'objet camion est un Véhicule, mais vous obtiendrez ceci :

isinstance(Vehicle(), Vehicle)  # returns True
type(Vehicle()) == Vehicle      # returns True
isinstance(Truck(), Vehicle)    # returns True
type(Truck()) == Vehicle        # returns False, and this probably won't be what you want.

En d'autres termes, isinstance est vrai pour les sous-classes, aussi.

Voir aussi : https://stackoverflow.com/q/707674/1341006

B T
B T
Réponse modifiée 1er avril 2019 в 11:55
316
0
John Millikin
John Millikin
11 octobre 2009 в 3:54
2009-10-11T03:54:17+00:00
Détails
Source
Editer
#9566193

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 :

if isinstance(b, (str, unicode)):
    do_something_else()

ou, en utilisant la classe abstraite basestring :

if isinstance(b, basestring):
    do_something_else()
Esparta Palma
Esparta Palma
Réponse modifiée 28 octobre 2013 в 3:51
62
0
 Xinus
Xinus
11 octobre 2009 в 3:59
2009-10-11T03:59:14+00:00
Détails
Source
Editer
#9566196

Selon la documentation python, voici une déclaration :

8.15. types - Noms des types intégrés

À partir de Python 2.2, les fonctions intégrées intégrées telles que int() et str(). str() sont aussi des noms pour les > types correspondants. types correspondants.

Ainsi, isinstance() doit être préféré à type().

Grijesh Chauhan
Grijesh Chauhan
Réponse modifiée 24 septembre 2013 в 5:52
2. Built-in Functions — Python 2.7.18 documentation
docs.python.org
2. Built-in Functions — Python 2.7.18 documentation
docs.python.org
13
0
Communautés apparentées 2
Python en français
Python en français
1 423 utilisateurs
Ouvrir telegram
Python 🇨🇵
Python 🇨🇵
117 utilisateurs
Un groupe de Python en français. @Linux_Fr
Ouvrir telegram
Ajouter une question
Catégories
Toutes
Technologie
Culture / Loisirs
Vie / Arts
Science
Professionnel
Entreprises
Utilisateurs
Tous
Nouveau
Populaire
1
Денис Васьков
Enregistré il y a 16 heures
2
Dima Patrushev
Enregistré il y a 2 jours
3
sirojidddin otaboyev
Enregistré il y a 1 semaine
4
Елена Гайдамамакинат
Enregistré il y a 1 semaine
5
Иван Степанюк
Enregistré il y a 1 semaine
BG
DE
EL
ES
FR
ID
IT
JA
KO
LT
LV
NL
PT
RO
RU
SK
TR
ZH
© kzen.dev 2023
Source
stackoverflow.com
sous licence cc by-sa 3.0 avec l'attribution