Skip to content

Den Typ eines Objekts in Python ermitteln und prüfen: type(), isinstance()

Python

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