tips un instance Python

Šajā rakstā mēs apskatīsim par type() un isinstance() funkcijas in Python , un kādas ir atšķirības starp tips () un isinstance () .

Kas ir tips Python?

Python ir iebūvēta metode, ko sauc par tipu, kas parasti noder, izdomājot programmā izmantotā mainīgā veidu izpildlaikā. The kanonisks veids, kā pārbaudīt, vai nav ievadīts Python ir norādīts zemāk:

Funkcijas type() sintakse

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

1. piemērs: Type() piemērs ar viena objekta parametru

Šajā piemērā mēs cenšamies pārbaudīt katra mainīgā datu tipu, piemēram, x, s un y, izmantojot type() funkcija .

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

Izvade:

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

2. piemērs: Type() piemērs ar nosaukumu, bāzēm un diktātu Parametrs

Ja nepieciešams pārbaudīt objekta tipu, ieteicams izmantot Python isinstance() funkcija vietā. Tas ir tāpēc, ka funkcija isinstance () arī pārbauda, ​​vai dotais objekts ir apakšklases gadījums.

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

Izvade:

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

Kas ir isinstance() Python?

Funkcija isinstance () pārbauda, ​​vai objekts (pirmais arguments) ir klases informācijas klases gadījums vai apakšklase (otrais arguments).

Funkcijas isinstance() sintakse

Sintakse: instancē (objekts, informācija par klasi)

Parametrs:

  • objekts: pārbaudāmais objekts
  • classinfo: klase, tips vai klašu un veidu kopa

Atgriezties: patiess, ja objekts ir klases gadījums vai apakšklase, vai jebkurš kortedža elements false pretējā gadījumā.

Ja klases informācija nav veids vai tipu virkne, tiek parādīts TypeError izņēmums.

1. piemērs:

Šajā piemērā klases objektam redzēsim test isinstance().

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

Izvade:

True False True 

2. piemērs:

Šajā piemērā mēs redzēsim testa isinstance() veselam skaitlim, peldošajam objektam un virknes objektam.

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

Izvade:

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

3. piemērs:

Šajā piemērā mēs redzēsim testa isinstance() for the korts , saraksts, vārdnīca , un komplekts objektu.

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

Izvade:

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

Kādas ir atšķirības starp type() un isinstance()?

Viena elementāra kļūda, ko pieļauj cilvēki, ir funkcijas type() izmantošana, kur piemērotāka būtu isinstance().

  • Ja pārbaudāt, vai objektam ir noteikts tips, jūs vēlaties, lai isinstance() pārbaudītu, vai pirmajā argumentā nodotais objekts ir tāda veida objekts, kāds ir nodots otrajā argumentā. Tādējādi tas darbojas kā paredzēts ar apakšklasēm un vecā stila klasēm, kurām visām ir mantotā tipa objekta instance.
  • type (), no otras puses, vienkārši atgriež objekta tipa objektu, un, salīdzinot to, ko tas atgriež ar cita tipa objektu, tiks iegūts tikai True, ja abās pusēs izmantojat tieši tāda paša veida objektu. Programmā Python ir vēlams izmantot Duck Typing (tipa pārbaude tiek atlikta uz izpildes laiku un tiek īstenota, izmantojot dinamisku rakstīšanu vai atspoguļošanu), nevis pārbaudot objekta veidu.

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

Izvade:

Geeksforgeeks Fox Bear 
  • Nākamais iemesls neizmantot tips() ir mantojuma atbalsta trūkums .

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

Izvade:

False True True False 
  • MyDict klasei ir visas dikta īpašības, bez jaunām metodēm. Tas darbosies tieši tāpat kā vārdnīca. Bet tips() neatgriezīs gaidīto rezultātu. Vēlams izmantot isinstance(). šajā gadījumā, jo tas dos gaidīto rezultātu:

Python3




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

Izvade:

True True False True