logo

tyyppi ja isstanssi Pythonissa

Tässä artikkelissa käsittelemme noin type()- ja isinstance()-funktio in Python , ja mitä eroja niillä on tyyppi() ja isinstance() .

Mikä on tyyppi Pythonissa?

Pythonissa on sisäänrakennettu menetelmä nimeltä type, joka on yleensä hyödyllinen määritettäessä ohjelman ajon aikana käytetyn muuttujan tyyppiä. The Kanoninen tapa tarkistaa kirjoitettaessa Python on annettu alla:



Type()-funktion syntaksi

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

Esimerkki 1: Esimerkki tyypistä(), jossa on yksiobjektiparametri

Tässä esimerkissä yritämme tarkistaa kunkin muuttujan tietotyypin, kuten x, s ja y käyttäen type()-funktio .

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

>

>

Lähtö:

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

Esimerkki 2: Esimerkki type()-muodosta, jossa on nimi, kantakohdat ja dict-parametri

Jos haluat tarkistaa objektin tyypin, on suositeltavaa käyttää Pythonia isinstance()-funktio sen sijaan. Tämä johtuu siitä, että isinstance()-funktio tarkistaa myös, onko annettu objekti aliluokan esiintymä.

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

>

>

Lähtö:

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

Mikä on isinstance() Pythonissa?

Isinstance()-funktio tarkistaa, onko objekti (ensimmäinen argumentti) luokan infoluokan (toinen argumentti) ilmentymä tai aliluokka.

Isinstance()-funktion syntaksi

Syntaksi: tapaus (objekti, luokkatiedot)

Parametri:

  • objekti: tarkistettava kohde
  • classinfo: luokka, tyyppi tai luokka ja tyyppi

Palata: true, jos objekti on luokan ilmentymä tai aliluokka tai mikä tahansa monikon elementti false muuten.

Jos luokkatiedot eivät ole tyyppiä tai tyyppiä, syntyy TypeError-poikkeus.

Esimerkki 1:

Tässä esimerkissä näemme testin isinstance() luokkaobjektille.

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

>

>

Lähtö:

True False True>

Esimerkki 2:

Tässä esimerkissä näemme test isinstance() kokonaisluku-, float- ja merkkijonoobjektille.

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

merkkijono int-muunnin
>

>

Lähtö:

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

Esimerkki 3:

Tässä esimerkissä näemme testin isinstance() for monikko , lista, sanakirja , ja aseta esine.

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

>

>

Lähtö:

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

Mitä eroa type() ja isinstance() välillä on?

Yksi perusvirhe, jonka ihmiset tekevät, on type()-funktion käyttö, jossa isinstance() olisi sopivampi.

  • Jos tarkistat, onko objektilla tiettyä tyyppiä, haluat isinstance():n, koska se tarkistaa, onko ensimmäisessä argumentissa välitetty objekti tyyppiä minkä tahansa toisessa argumentissa välitetyn tyyppisen objektin tyyppi. Siten se toimii odotetusti alaluokkien ja vanhan tyylisten luokkien kanssa, joilla kaikilla on vanhan tyypin objektiinstanssi.
  • type() toisaalta yksinkertaisesti palauttaa objektin tyyppiobjektin ja vertaamalla sen palauttamaa toiseen tyyppiobjektiin saadaan True vain, kun käytät täsmälleen samantyyppistä objektia molemmilla puolilla. Pythonissa on parempi käyttää Duck Typing -toimintoa (tyypin tarkistus siirretään ajon aikana ja se toteutetaan dynaamisen kirjoittamisen tai heijastuksen avulla) objektin tyypin tarkastamisen sijaan.

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

>

>

Lähtö:

Geeksforgeeks Fox Bear>
  • Seuraava syy olla käyttämättä type() on perinnön tuen puute .

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

>

>

Lähtö:

False True True False>
  • MyDict-luokassa on kaikki dictin ominaisuudet ilman uusia menetelmiä. Se käyttäytyy täsmälleen kuin sanakirja. Mutta type() ei palauta odotettua tulosta. Isinstance():n käyttö on suositeltavaa tässä tapauksessa, koska se antaa odotetun tuloksen:

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

>

>

Lähtö:

True True False True>