Was sind die Unterschiede zwischen type() und isinstance()?
Was sind die Unterschiede zwischen diesen beiden Codefragmenten?
Verwendung von type()
:
import types
if type(a) is types.DictType:
do_something()
if type(b) in types.StringTypes:
do_something_else()
Verwendung von isinstance()
:
if isinstance(a, dict):
do_something()
if isinstance(b, str) or isinstance(b, unicode):
do_something_else()
1153
3
Hier ist ein Beispiel, bei dem
isinstance
etwas erreicht, wastype
nicht kann:in diesem Fall ist ein LKW-Objekt ein Fahrzeug, aber man erhält dies:
Mit anderen Worten,
isinstance
ist auch für Unterklassen wahr.Siehe auch:
Letzteres ist vorzuziehen, weil es Unterklassen richtig behandelt. Tatsächlich kann Ihr Beispiel sogar noch einfacher geschrieben werden, weil der zweite Parameter von "isinstance()" ein Tupel sein kann:
oder, unter Verwendung der abstrakten Klasse
basestring
:Gemäß der Python-Dokumentation ist hier eine Anweisung:
Daher sollte
isinstance()
gegenübertype()
bevorzugt werden.