logo

type og isinstance i Python

I denne artikkelen vil vi dekke ca type() og isinstance() funksjoner i Python , og hva er forskjellene mellom type() og isinstance() .

Hva er type i Python?

Python har en innebygd metode kalt type som vanligvis kommer godt med når man finner ut hvilken type variabel som brukes i programmet under kjøretiden. De kanonisk måte å sjekke for inntasting Python er gitt nedenfor:

Syntaks for type() funksjon

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

Eksempel 1: Eksempel på type() med en enkeltobjektparameter

I dette eksemplet prøver vi å sjekke datatypen til hver variabel, som x, s og y ved hjelp av type() funksjon .



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

>

>

Produksjon:

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

Eksempel 2: Eksempel på type() med navn, baser og diktparameter

Hvis du trenger å sjekke typen til et objekt, anbefales det å bruke Python isinstance() funksjon i stedet. Det er fordi funksjonen isinstance() også sjekker om det gitte objektet er en forekomst av underklassen.

Python3




hvordan få iphone-emojis på Android

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

>

>

Produksjon:

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

Hva er isinstance() i Python?

Funksjonen isinstance() sjekker om objektet (første argument) er en forekomst eller underklasse av klassen info-klassen (andre argument).

Syntaks for funksjonen isinstance().

Syntaks: er forekomst (objekt, klasseinfo)

Parameter:

  • objekt : objekt som skal kontrolleres
  • klasseinfo : klasse, type eller tuppel av klasser og typer

Komme tilbake: sant hvis objektet er en forekomst eller underklasse av en klasse, eller et hvilket som helst element i tuple false ellers.

Hvis klasseinfo ikke er en type eller tuppel av typer, oppstår et TypeError-unntak.

Eksempel 1:

I dette eksemplet vil vi se test isinstance() for klasseobjektet.

Python3




hvor stor er skjermen min
# 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)))>

>

>

Produksjon:

True False True>

Eksempel 2:

I dette eksemplet vil vi se test isinstance() for heltall-, float- og strengobjektet.

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

>

>

Produksjon:

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

Eksempel 3:

I dette eksemplet vil vi se test isinstance() for tuppel , liste , ordbok , og sett gjenstand.

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

>

>

Produksjon:

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

Hva er forskjellene mellom type() og isinstance()?

En elementær feil folk gjør er å bruke type()-funksjonen der isinstance() ville være mer passende.

  • Hvis du sjekker for å se om et objekt har en bestemt type, vil du ha isinstance() da det sjekker om objektet som sendes i det første argumentet er av typen noen av typeobjektene som sendes i det andre argumentet. Dermed fungerer det som forventet med underklasser og klasser i gammel stil, som alle har den gamle typen objektforekomst.
  • type(), på den annen side, returnerer ganske enkelt typeobjektet til et objekt, og å sammenligne det det returnerer med et annet typeobjekt vil bare gi True når du bruker nøyaktig samme typeobjekt på begge sider. I Python er det å foretrekke å bruke Duck Typing (typekontroll er utsatt til kjøretid og implementeres ved hjelp av dynamisk skriving eller refleksjon) i stedet for å inspisere typen til et objekt.

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

>

>

Produksjon:

Geeksforgeeks Fox Bear>
  • Den neste grunnen til å ikke bruke type() er mangelen på støtte for arv .

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

>

>

Produksjon:

False True True False>
  • MyDict-klassen har alle egenskapene til en dict, uten noen nye metoder. Den vil oppføre seg akkurat som en ordbok. Men type() vil ikke returnere det forventede resultatet. Å bruke isinstance() er å foretrekke i dette tilfellet fordi det vil gi det forventede resultatet:

Python3


blokkere annonser på youtube android



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

>

>

Produksjon:

True True False True>