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>