tip și este o instanță în Python
În acest articol, vom acoperi despre funcția type() și isinstance() în Piton , și care sunt diferențele dintre tip() și esteinstanta() .
Ce este tipul în Python?
Python are o metodă încorporată numită type, care este, în general, utilă în timp ce se determină tipul de variabilă folosită în program în timpul de execuție. The modalitate canonică de a verifica introducerea Piton este dat mai jos:
Sintaxa funcției type().
type(object) type(name, bases, dict)
Exemplul 1: Exemplu de type() cu un singur parametru de obiect
În acest exemplu, încercăm să verificăm tipul de date al fiecărei variabile, cum ar fi x, s și y folosind funcția tip(). .
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))> |
Ieșire:
class 'int' class 'str' class 'list'
Exemplul 2: Exemplu de type() cu un nume, baze și parametru dict
Dacă trebuie să verificați tipul unui obiect, este recomandat să utilizați Python funcția isinstance(). in schimb. Se datorează faptului că funcția isinstance() verifică și dacă obiectul dat este o instanță a subclasei.
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))> |
Ieșire:
{'b': 12, 'a': 'Foo', '__dict__': , '__doc__': None, '__weakref__': } {'b': 12, 'a': 'Foo', '__doc__': None} Ce este isinstance() în Python?
Funcția isinstance() verifică dacă obiectul (primul argument) este o instanță sau o subclasă a clasei de informații despre clasă (al doilea argument).
Sintaxa funcției isinstance().
Sintaxă: esteinstanță (obiect, informații despre clasă)
Parametru:
- obiect : obiect de verificat
- classinfo : clasă, tip sau tuplu de clase și tipuri
Întoarcere: true dacă obiectul este o instanță sau o subclasă a unei clase sau orice element al tuplului false în caz contrar.
Dacă informațiile despre clasă nu sunt un tip sau un tuplu de tipuri, este generată o excepție TypeError.
Exemplul 1:
În acest exemplu, vom vedea testul isinstance() pentru obiectul clasei.
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)))> |
Ieșire:
True False True
Exemplul 2:
În acest exemplu, vom vedea testul isinstance() pentru obiectul întreg, float și șir.
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)> |
Ieșire:
is a float: True is an integer: True is a string: True
Exemplul 3:
În acest exemplu, vom vedea testul isinstance() pentru tuplu , lista , dicţionar , și a stabilit obiect.
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)> |
Ieșire:
is a tuple: True is a set: True is a list: True is a dict: True
Care sunt diferențele dintre type() și isinstance()?
O eroare elementară pe care o fac oamenii este utilizarea funcției type() unde isinstance() ar fi mai potrivită.
- Dacă verificați pentru a vedea dacă un obiect are un anumit tip, doriți isinstance() deoarece verifică dacă obiectul trecut în primul argument este de tipul oricăruia dintre obiectele de tip trecut în al doilea argument. Astfel, funcționează așa cum era de așteptat cu clasele de subclasare și stil vechi, toate având instanța obiectului de tip moștenit.
- type(), pe de altă parte, returnează pur și simplu obiectul tip al unui obiect, iar compararea a ceea ce returnează la un alt obiect tip va produce True doar atunci când utilizați exact același tip de obiect pe ambele părți. În Python, este de preferat să folosiți Duck Typing (verificarea tipului este amânată până la timpul de execuție și este implementată prin tastare dinamică sau reflectare) decât inspectarea tipului unui obiect.
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)> |
Ieșire:
Geeksforgeeks Fox Bear
- Următorul motiv pentru a nu folosi type() este lipsa suportului pentru moștenire .
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)> |
Ieșire:
False True True False
- Clasa MyDict are toate proprietățile unui dict, fără metode noi. Se va comporta exact ca un dicționar. Dar type() nu va returna rezultatul așteptat. Utilizarea isinstance() este de preferat în acest caz, deoarece va da rezultatul așteptat:
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> ))> |
Ieșire:
True True False True