logo

tipus i és una instància a Python

En aquest article, tractarem sobre tipus() i la funció isinstance() a Python , i quines diferències hi ha entre tipus () i és una instància () .

Què és el tipus en Python?

Python té un mètode integrat anomenat type que generalment és útil per determinar el tipus de variable utilitzada al programa en temps d'execució. El manera canònica de comprovar si hi ha escrit Python es dona a continuació:



Sintaxi de la funció type().

type(object) type(name, bases, dict)>

Exemple 1: exemple de type() amb un paràmetre d'objecte únic

En aquest exemple, estem intentant comprovar el tipus de dades de cada variable, com x, s i y utilitzant funció tipus(). .

Python 3








# 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))>

>

>

Sortida:

class 'int' class 'str' class 'list'>

Exemple 2: exemple de type() amb un nom, bases i paràmetre dict

Si necessiteu comprovar el tipus d'objecte, es recomana utilitzar Python funció isinstance(). en canvi. És perquè la funció isinstance() també verifica si l'objecte donat és una instància de la subclasse.

Python 3




# 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))>

>

>

Sortida:

{'b': 12, 'a': 'Foo', '__dict__': , '__doc__': None, '__weakref__': } {'b': 12, 'a': 'Foo', '__doc__': None}>

Què és isinstance() a Python?

La funció isinstance() comprova si l'objecte (primer argument) és una instància o subclasse de la classe d'informació de classe (segon argument).

Sintaxi de la funció isinstance().

Sintaxi: és instància (objecte, informació de classe)

Paràmetre:

  • object : objecte a comprovar
  • classinfo : classe, tipus o tupla de classes i tipus

Tornada: true si l'objecte és una instància o subclasse d'una classe, o qualsevol element de la tupla false en cas contrari.

Si la informació de classe no és un tipus o una tupla de tipus, es genera una excepció TypeError.

Exemple 1:

En aquest exemple, veurem la prova isinstance() per a l'objecte de classe.

Python 3




# 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)))>

>

>

Sortida:

True False True>

Exemple 2:

En aquest exemple, veurem la prova isinstance() per a l'objecte enter, float i string.

Python 3




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)>

>

>

Sortida:

is a float: True is an integer: True is a string: True>

Exemple 3:

En aquest exemple, veurem la prova isinstance() per a tupla , llista , diccionari , i conjunt objecte.

Python 3




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)>

>

>

Sortida:

is a tuple: True is a set: True is a list: True is a dict: True>

Quines diferències hi ha entre type() i isinstance()?

Un error elemental que cometen la gent és utilitzar la funció type() on isinstance() seria més apropiat.

  • Si esteu comprovant si un objecte té un tipus determinat, voleu que isinstance() comprova si l'objecte passat en el primer argument és del tipus d'algun dels objectes de tipus passat en el segon argument. Per tant, funciona com s'esperava amb classes de subclassificació i d'estil antic, totes elles amb la instància d'objecte de tipus heretat.
  • type(), d'altra banda, simplement retorna l'objecte tipus d'un objecte, i comparar el que retorna amb un altre objecte tipus només donarà True quan utilitzeu exactament el mateix objecte tipus a ambdós costats. A Python, és preferible utilitzar Duck Typing (la comprovació de tipus es difereix al temps d'execució i s'implementa mitjançant una escriptura dinàmica o reflexió) en lloc d'inspeccionar el tipus d'objecte.

Python 3




# 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)>

>

>

Sortida:

Geeksforgeeks Fox Bear>
  • La següent raó per no utilitzar type() és la manca de suport per a l'herència .

Python 3




# 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)>

>

com revelar aplicacions ocultes

>

Sortida:

False True True False>
  • La classe MyDict té totes les propietats d'un dict, sense cap mètode nou. Es comportarà exactament com un diccionari. Però type() no retornarà el resultat esperat. És preferible utilitzar isinstance(). en aquest cas perquè donarà el resultat esperat:

Python 3




# 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>))>

>

>

Sortida:

True True False True>