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 'instance'> old style class <type 'instance'> new style class <class '__main__.C'> True
Es gibt kein Sprichwort darüber, dass eine Instanz besser ist als ein Typ. Nur welches den Bedürfnissen besser entspricht.