tapez et isinstance en Python
Dans cet article, nous aborderons fonction type() et isinstance() dans Python , et quelles sont les différences entre taper() et estinstance() .
Qu’est-ce que le type en Python ?
Python a une méthode intégrée appelée type qui s'avère généralement utile pour déterminer le type de la variable utilisée dans le programme lors de l'exécution. Le manière canonique de vérifier la saisie Python est donné ci-dessous :
Syntaxe de la fonction type()
type(object) type(name, bases, dict)
Exemple 1 : exemple de type() avec un paramètre d'objet unique
Dans cet exemple, nous essayons de vérifier le type de données de chaque variable, tels que x, s et y en utilisant fonction type() .
Python3
# Python code type() with a single object parameter> x> => 5> s> => 'geeksforgeeks'> y> => [> 1> ,> 2> ,> 3> ]> print> (> type> (x))> print> (> type> (s))> print> (> type> (y))> |
Sortir:
class 'int' class 'str' class 'list'
Exemple 2 : exemple de type() avec un nom, des bases et un paramètre dict
Si vous devez vérifier le type d'un objet, il est recommandé d'utiliser Python fonction isinstance() plutôt. C'est parce que la fonction isinstance() vérifie également si l'objet donné est une instance de la sous-classe.
Python3
# Python code for type() with a name,> # bases and dict parameter> o1> => type> (> 'X'> , (> object> ,),> dict> (a> => 'Foo'> , b> => 12> ))> print> (> type> (o1))> print> (> vars> (o1))> class> test:> > a> => 'Foo'> b> => 12> o2> => type> (> 'Y'> , (test,),> dict> (a> => 'Foo'> , b> => 12> ))> print> (> type> (o2))> print> (> vars> (o2))> |
Sortir:
{'b': 12, 'a': 'Foo', '__dict__': , '__doc__': None, '__weakref__': } {'b': 12, 'a': 'Foo', '__doc__': None} Qu'est-ce que isinstance() en Python ?
La fonction isinstance() vérifie si l'objet (premier argument) est une instance ou une sous-classe de la classe d'informations de classe (deuxième argument).
Syntaxe de la fonction isinstance()
Syntaxe: est une instance (objet, information de classe)
Paramètre:
- object : objet à vérifier
- classinfo : classe, type ou tuple de classes et de types
Retour: true si l'objet est une instance ou une sous-classe d'une classe, ou tout élément du tuple false dans le cas contraire.
Si les informations de classe ne sont pas un type ou un tuple de types, une exception TypeError est levée.
Exemple 1:
Dans cet exemple, nous verrons tester isinstance() pour l'objet de classe.
Python3
# Python code for isinstance()> class> Test:> > a> => 5> TestInstance> => Test()> print> (> isinstance> (TestInstance, Test))> print> (> isinstance> (TestInstance, (> list> ,> tuple> )))> print> (> isinstance> (TestInstance, (> list> ,> tuple> , Test)))> |
Sortir:
True False True
Exemple 2 :
Dans cet exemple, nous verrons tester isinstance() pour les objets entier, flottant et chaîne.
Python3
weight> => isinstance> (> 17.9> ,> float> )> print> (> 'is a float:'> , weight)> num> => isinstance> (> 71> ,> int> )> print> (> 'is an integer:'> , num)> string> => isinstance> (> 'Geeksforgeeks'> ,> str> )> print> (> 'is a string:'> , string)> |
Sortir:
is a float: True is an integer: True is a string: True
Exemple 3 :
Dans cet exemple, nous verrons tester isinstance() pour le tuple , liste , dictionnaire , et ensemble objet.
Python3
tuple1> => isinstance> ((> 'A'> ,> 'B'> ,> 'C'> ),> tuple> )> print> (> 'is a tuple:'> , tuple1)> set1> => isinstance> ({> 'A'> ,> 'B'> ,> 'C'> },> set> )> print> (> 'is a set:'> , set1)> list1> => isinstance> ([> 'A'> ,> 'B'> ,> 'C'> ],> list> )> print> (> 'is a list:'> , list1)> dict1> => isinstance> ({> 'A'> :> '1'> ,> 'B'> :> '2'> ,> 'C'> :> '3'> },> dict> )> print> (> 'is a dict:'> , dict1)> |
Sortir:
is a tuple: True is a set: True is a list: True is a dict: True
Quelles sont les différences entre type() et isinstance() ?
Une erreur élémentaire que font les gens est d’utiliser la fonction type() où isinstance() serait plus appropriée.
- Si vous vérifiez si un objet a un certain type, vous voulez isinstance() car il vérifie si l'objet passé dans le premier argument est du type de l'un des objets de type passés dans le deuxième argument. Ainsi, cela fonctionne comme prévu avec les sous-classes et les classes de style ancien, qui ont toutes l'instance d'objet de type hérité.
- type(), d'autre part, renvoie simplement l'objet type d'un objet, et comparer ce qu'il renvoie à un autre objet type ne donnera True que lorsque vous utilisez exactement le même objet type des deux côtés. En Python, il est préférable d'utiliser Duck Typing (la vérification du type est différée au moment de l'exécution et est implémentée au moyen d'un typage dynamique ou d'une réflexion) plutôt que d'inspecter le type d'un objet.
Python3
# Python code to illustrate duck typing> class> User(> object> ):> > def> __init__(> self> , firstname):> > self> .firstname> => firstname> > @property> > def> name(> self> ):> > return> self> .firstname> class> Animal(> object> ):> > pass> class> Fox(Animal):> > name> => 'Fox'> class> Bear(Animal):> > name> => 'Bear'> # Use the .name attribute (or property) regardless of the type> for> a> in> [User(> 'Geeksforgeeks'> ), Fox(), Bear()]:> > print> (a.name)> |
Sortir:
Geeksforgeeks Fox Bear
- La prochaine raison de ne pas utiliser type() est le manque de prise en charge de l'héritage .
Python3
# python code to illustrate the lack of> # support for inheritance in type()> class> MyDict(> dict> ):> > '''A normal dict, that is always created with an 'initial' key'''> > def> __init__(> self> ):> > self> [> 'initial'> ]> => 'some data'> d> => MyDict()> print> (> type> (d)> => => dict> )> print> (> type> (d)> => => MyDict)> d> => dict> ()> print> (> type> (d)> => => dict> )> print> (> type> (d)> => => MyDict)> |
Sortir:
False True True False
- La classe MyDict possède toutes les propriétés d'un dict, sans aucune nouvelle méthode. Il se comportera exactement comme un dictionnaire. Mais type() ne renverra pas le résultat attendu. Utiliser isinstance() est préférable dans ce cas car cela donnera le résultat attendu :
Python3
# python code to show isinstance() support> # inheritance> class> MyDict(> dict> ):> > '''A normal dict, that is always created with an 'initial' key'''> > def> __init__(> self> ):> > self> [> 'initial'> ]> => 'some data'> d> => MyDict()> print> (> isinstance> (d, MyDict))> print> (> isinstance> (d,> dict> ))> d> => dict> ()> print> (> isinstance> (d, MyDict))> print> (> isinstance> (d,> dict> ))> |
Sortir:
True True False True