Typ und isinstance in Python

In diesem Artikel werden wir darüber sprechen type() und isinstance() funktionieren in Python , und was sind die Unterschiede zwischen Typ() Und isinstance() .

Was ist Typ in Python?

Python verfügt über eine integrierte Methode namens „type“, die im Allgemeinen nützlich ist, wenn es darum geht, den Typ der im Programm zur Laufzeit verwendeten Variablen herauszufinden. Der kanonische Methode zur Eingabeprüfung Python ist unten angegeben:

Syntax der Funktion type()

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

Beispiel 1: Beispiel für type() mit einem einzelnen Objektparameter

In diesem Beispiel versuchen wir, den Datentyp jeder Variablen zu überprüfen. wie x, s und y mit type()-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))>

Ausgabe:

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

Beispiel 2: Beispiel für type() mit einem Namen, Basen und einem Diktparameter

Wenn Sie den Typ eines Objekts überprüfen müssen, empfiehlt sich die Verwendung von Python isinstance()-Funktion stattdessen. Dies liegt daran, dass die Funktion isinstance() auch prüft, ob das angegebene Objekt eine Instanz der Unterklasse ist.

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

Ausgabe:

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

Was ist isinstance() in Python?

Die Funktion isinstance() prüft, ob das Objekt (erstes Argument) eine Instanz oder Unterklasse der Klasseninfo-Klasse (zweites Argument) ist.

Syntax der Funktion isinstance()

Syntax: ist eine Instanz (Objekt, Klasseninfo)

Parameter:

  • Objekt: zu prüfendes Objekt
  • classinfo: Klasse, Typ oder Tupel von Klassen und Typen

Zurückkehren: true, wenn das Objekt eine Instanz oder Unterklasse einer Klasse ist, oder ein beliebiges Element des Tupels, andernfalls false.

Wenn es sich bei der Klasseninformation nicht um einen Typ oder ein Tupel von Typen handelt, wird eine TypeError-Ausnahme ausgelöst.

Beispiel 1:

In diesem Beispiel sehen wir test isinstance() für das Klassenobjekt.

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

Ausgabe:

True False True 

Beispiel 2:

In diesem Beispiel sehen wir test isinstance() für das Integer-, Float- und String-Objekt.

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

Ausgabe:

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

Beispiel 3:

In diesem Beispiel sehen wir test isinstance() für Tupel , Liste , Wörterbuch , Und Satz 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)>

Ausgabe:

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

Was sind die Unterschiede zwischen type() und isinstance()?

Ein elementarer Fehler, den Menschen machen, ist die Verwendung der Funktion type(), wobei isinstance() besser geeignet wäre.

  • Wenn Sie prüfen möchten, ob ein Objekt einen bestimmten Typ hat, möchten Sie, dass isinstance() prüft, ob das im ersten Argument übergebene Objekt vom Typ eines der im zweiten Argument übergebenen Typobjekte ist. Daher funktioniert es wie erwartet mit Unterklassen und Klassen alten Stils, die alle über die Objektinstanz des Legacy-Typs verfügen.
  • type() hingegen gibt einfach das Typobjekt eines Objekts zurück, und ein Vergleich dessen, was es zurückgibt, mit einem anderen Typobjekt liefert nur dann „True“, wenn Sie auf beiden Seiten genau dasselbe Typobjekt verwenden. In Python ist es vorzuziehen, Duck Typing zu verwenden (die Typprüfung wird zur Laufzeit verschoben und mittels dynamischer Typisierung oder Reflexion implementiert), anstatt den Typ eines Objekts zu überprüfen.

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

Ausgabe:

Geeksforgeeks Fox Bear 
  • Der nächste Grund, es nicht zu verwenden type() ist die fehlende Unterstützung für die Vererbung .

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

Ausgabe:

False True True False 
  • Die MyDict-Klasse verfügt über alle Eigenschaften eines Diktats, ohne neue Methoden. Es verhält sich genau wie ein Wörterbuch. Aber type() wird nicht das erwartete Ergebnis zurückgeben. Die Verwendung von isinstance() ist vorzuziehen in diesem Fall, weil es das erwartete Ergebnis liefert:

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

Ausgabe:

True True False True 


Top Artikel

Kategorie

Interessante Artikel