Heim  >  Artikel  >  Backend-Entwicklung  >  Der Unterschied zwischen dem Beurteilungstyp des Python-Datentyps und der Instanz

Der Unterschied zwischen dem Beurteilungstyp des Python-Datentyps und der Instanz

高洛峰
高洛峰Original
2016-10-19 14:39:051808Durchsuche

Im Projekt überprüfen wir den vom Client an jeder Schnittstelle übergebenen Parametertyp. Wenn die Überprüfung fehlschlägt, wird ein Fehlercode „Parameterfehler“ an den Client zurückgegeben.

Dies erleichtert nicht nur das Debuggen, sondern erhöht auch die Robustheit. Da der Client betrügen kann, ist es nicht leicht, den vom Client übergebenen Parametern zu vertrauen.

Verwenden Sie die Typfunktion, um den Typ zu überprüfen, was sehr einfach zu verwenden ist, z. B.

>>type('foo') == str

True

>>Typ (2.3) in (int, float)

True

Da es type() gibt, um den Typ zu bestimmen, warum gibt es isinstance()?

Ein offensichtlicher Unterschied besteht in der Bestimmung von Unterklassen.

type() betrachtet die Unterklasse nicht als übergeordneten Typ.

isinstance() betrachtet die Unterklasse als übergeordneten Klassentyp.

Tausend Worte sind einen Meter wert.

class Foo(object):
    pass
    
class Bar(Foo):
    pass
    
print type(Foo()) == Foo
print type(Bar()) == Foo
print isinstance(Bar(),Foo)
   
class Foo(object):
    pass
   
class Bar(Foo):
    pass
   
print type(Foo()) == Foo
print type(Bar()) == Foo
print isinstance(Bar(),Foo)
输出
True
False
True

Es ist zu beachten, dass die type()-Ergebnisse von Klassen alten Stils und Klassen neuen Stils unterschiedlich sind. Alle Klassen im alten Stil sind .

class A:
    pass
    
class B:
    pass
    
class C(object):
    pass
    
print 'old style class',type(A())
print 'old style class',type(B())
print 'new style class',type(C())
print type(A()) == type(B())
   
class A:
    pass
   
class B:
    pass
   
class C(object):
    pass
   
print 'old style class',type(A())
print 'old style class',type(B())
print 'new style class',type(C())
print type(A()) == type(B())
输出
old style class <type &#39;instance&#39;>
old style class <type &#39;instance&#39;>
new style class <class &#39;__main__.C&#39;>
True

Es gibt kein Sprichwort darüber, dass eine Instanz besser ist als ein Typ. Nur welches den Bedürfnissen besser entspricht.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn