logo

typ och isinstans i Python

I den här artikeln kommer vi att täcka om type() och isinstance() fungerar i Pytonorm , och vad är skillnaderna mellan typ() och isinstance() .

Vad är typ i Python?

Python har en inbyggd metod som kallas typ som i allmänhet kommer väl till pass när man räknar ut vilken typ av variabel som används i programmet under körningen. De kanoniskt sätt att kontrollera inskrivning Pytonorm ges nedan:

Syntax för funktion typ().

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

Exempel 1: Exempel på type() med en Single Object Parameter

I det här exemplet försöker vi kontrollera datatypen för varje variabel, som x, s och y använder typ() funktion .



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

>

statisk funktion i java
>

Produktion:

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

Exempel 2: Exempel på type() med ett namn, baser och dict-parameter

Om du behöver kontrollera typen av ett objekt rekommenderar vi att du använder Python isinstance() funktion istället. Det beror på att isinstance()-funktionen också kontrollerar om det givna objektet är en instans av underklassen.

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

greibach normal form

>

>

Produktion:

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

Vad är isinstance() i Python?

Funktionen isinstance() kontrollerar om objektet (första argumentet) är en instans eller underklass till klassen infoklass (andra argument).

Syntax för funktionen isinstance().

Syntax: ärinstans (objekt, klassinformation)

Parameter:

  • objekt : objekt som ska kontrolleras
  • classinfo : klass, typ eller tuppel av klasser och typer

Lämna tillbaka: sant om objektet är en instans eller underklass av en klass, eller något annat element i tuplen false.

Om klassinformation inte är en typ eller tuppel av typer, uppstår ett TypeError-undantag.

Exempel 1:

I det här exemplet kommer vi att se test isinstance() för klassobjektet.

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

>

>

Produktion:

True False True>

Exempel 2:

I det här exemplet kommer vi att se test isinstance() för objektet heltal, float och sträng.

Python3




systemmjukvara

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

>

>

Produktion:

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

Exempel 3:

I det här exemplet kommer vi att se test isinstance() för tupel , lista , lexikon , och uppsättning objekt.

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

>

>

intervjufrågor för java språk

Produktion:

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

Vad är skillnaderna mellan type() och isinstance()?

Ett elementärt fel som människor gör är att använda funktionen type() där isinstance() skulle vara lämpligare.

  • Om du kontrollerar om ett objekt har en viss typ, vill du ha isinstance() eftersom det kontrollerar om objektet som skickas i det första argumentet är av typen av något av typobjekten som skickas i det andra argumentet. Således fungerar det som förväntat med underklassning och klasser av gammal stil, som alla har objektinstansen av äldre typ.
  • type(), å andra sidan, returnerar helt enkelt typobjektet för ett objekt, och om man jämför vad det returnerar med ett annat typobjekt kommer det bara att ge True när du använder exakt samma typobjekt på båda sidor. I Python är det att föredra att använda Duck Typing (typkontroll skjuts upp till körning och implementeras med hjälp av dynamisk typning eller reflektion) snarare än att inspektera typen av ett 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)>

>

>

Produktion:

Geeksforgeeks Fox Bear>
  • Nästa anledning att inte använda type() är bristen på stöd för 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)>

>

>

Produktion:

False True True False>
  • Klassen MyDict har alla egenskaper för ett dict, utan några nya metoder. Det kommer att bete sig precis som en ordbok. Men typ() returnerar inte det förväntade resultatet. Att använda isinstance() är att föredra i det här fallet eftersom det kommer att ge det förväntade resultatet:

Python3


returtyp i java



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

>

>

Produktion:

True True False True>