
In Python can SIE den Typ eines Objekts (Variable und Literal) mit den eingebauten Funktionen type() und isinstance() abrufen, drucken und prüfen.
Dieser Artikel hat folgenden Inhalt.
- Holen und drucken Sie den Typ eines Objekts:
type()
- Überprüfen Sie den Typ eines Objekts:
type(), isinstance()
- Mit Typ()
- Mit isinstance()
- Der Unterschied zwischen type() und isinstance()
Holen und drucken Sie den Typ eines Objekts:type()
type() gibt den Typ eines Objekts zurück. Sie können sterben verwenden, um den Typ einer Variablen und ein Literal wie typeof in anderen Programmiersprachen abzurufen und auszugeben.
print(type('string'))
# <class 'str'>
print(type(100))
# <class 'int'>
print(type([0, 1, 2]))
# <class 'list'>
Der Rückgabewert von type() ist ein Objekttyp wie str oder int.
print(type(type('string')))
# <class 'type'>
print(type(str))
# <class 'type'>
Überprüfen Sie den Typ eines Objekts:type(), isinstance()
Verwenden Sie type() oder isinstance(), um zu prüfen, ob ein Objekt von einem bestimmten Typ ist.
Mit Typ()
Indem Sie den Rückgabewert von type() mit einem beliebigen Typ vergleichen, can SIE überprüfen, ob das Objekt von diesem Typ ist.
print(type('string') is str)
# True
print(type('string') is int)
# False
def is_str(v):
return type(v) is str
print(is_str('string'))
# True
print(is_str(100))
# False
print(is_str([0, 1, 2]))
# False
Wenn SIE überprüfen möchten, ob es sich um einen von mehreren Typen handelt, verwenden SIE in und mehrere Typen von Tupeln.
def is_str_or_int(v):
return type(v) in (str, int)
print(is_str_or_int('string'))
# True
print(is_str_or_int(100))
# True
print(is_str_or_int([0, 1, 2]))
# False
Es ist auch möglich, Funktionen zu definieren, die Operationen je nach Typ zu ändern.
def type_condition(v):
if type(v) is str:
print('type is str')
elif type(v) is int:
print('type is int')
else:
print('type is not str or int')
type_condition('string')
# type is str
type_condition(100)
# type is int
type_condition([0, 1, 2])
# type is not str or int
Mit isinstance()
isinstance(object, type) gibt True zurück, wenn das erste Argumentobjekt eine Instanz des zweiten Argumenttyps oder eine Instanz einer Unterklasse von type ist.
Als zweites Argument können Sie ein Tupel verwenden. Gibt True zurück, wenn es sich um eine Instanz eines beliebigen Typs handelt.
print(isinstance('string', str))
# True
print(isinstance(100, str))
# False
print(isinstance(100, (int, str)))
# True
Funktionen, die den Beispielen mit type() ähneln, können wie folgt geschrieben werden:
def is_str(v):
return isinstance(v, str)
print(is_str('string'))
# True
print(is_str(100))
# False
print(is_str([0, 1, 2]))
# False
def is_str_or_int(v):
return isinstance(v, (int, str))
print(is_str_or_int('string'))
# True
print(is_str_or_int(100))
# True
print(is_str_or_int([0, 1, 2]))
# False
def type_condition(v):
if isinstance(v, str):
print('type is str')
elif isinstance(v, int):
print('type is int')
else:
print('type is not str or int')
type_condition('string')
# type is str
type_condition(100)
# type is int
type_condition([0, 1, 2])
# type is not str or int
Der Unterschied zwischen type() und isinstance()
Der Unterschied zwischen type() und isinstance() besteht darin, dass isinstance() True zurückgibt, selbst für Instanzen von Unterklassen, sterben die im zweiten Argument angegebenen Klasse erben.
Definieren Sie beispielsweise sterben folgende Oberklasse (Basisklasse) und Unterklasse (abgeleitete Klasse).
class Base:
pass
class Derive(Base):
pass
base = Base()
print(type(base))
# <class '__main__.Base'>
derive = Derive()
print(type(derive))
# <class '__main__.Derive'>
type() gibt True nur zurück, wenn die Typen übereinstimmen, aber isinstance() gibt True auch für die Oberklasse zurück.
print(type(derive) is Derive)
# True
print(type(derive) is Base)
# False
print(isinstance(derive, Derive))
# True
print(isinstance(derive, Base))
# True
Beispiel ist der boolesche Typ bool (True, False) eine Unterklasse von int. isinstance() gibt True für int und bool für ein bool-Objekt zurück.
print(type(True))
# <class 'bool'>
print(type(True) is bool)
# True
print(type(True) is int)
# False
print(isinstance(True, bool))
# True
print(isinstance(True, int))
# True
Verwenden Sie type(), wenn Sie den genauen Typ überprüfen möchten, und isinstance(), wenn Sie dies unter Berücksichtigung der Vererbung überprüfen möchten.
Eine eingebaute Funktion issubclass() prüft, ob eine Klasse eine Unterklasse einer anderen Klasse ist.
print(issubclass(bool, int))
# True
print(issubclass(bool, float))
# False