Du liest:
Die Python type Funktion (mit Codebeispielen)

Die Python type Funktion (mit Codebeispielen)

von Patrick
15.06.2020
Python type Funktion

Mit type stellt Python eine Funktion zur Verfügung, mit der sich der Typ eines Objektes leicht ermitteln lässt. Zudem kannst du folglich damit auch Typen vergleichen. Zusätzlich kannst du mit der Python type Funktion dynamisch neue Klassen erstellen. Wie du all das machen kannst, zeige ich dir im folgenden Artikel.

1. Typen ermitteln

Um den Typ eines Objektes zu ermitteln reicht es, ein Objekt an type zu übergeben.

print(type(s))
# <class 'str'>

d = {'d': 'i', 'c': 't'}
print(type(d))
# <class 'dict'>

l = ['l', 'i', 's', 't']
print(type(l))
# <class 'list'>

t = ('t', 'u', 'p', 'l', 'e')
print(type(t))
# <class 'tuple'>

2. Vergleichen mit Python type und isinstance

Am Einfachsten lässt sich überprüfen, ob ein Objekt einen bestimmten Typ hat mit type und dem Vergleichsoperator ==. Zu diesem Zweck wird im folgenden Beispiel die Klasse Foo erstellt.

class Foo:
    pass

foo = Foo()
print(type(foo) == Foo)
# True

bar = 'bar'
print(type(bar) == Foo)
# False

Allerdings lässt sich mit type nur ermitteln, ob ein Objekt eine Instanz einer Klasse ist. Das heißt, Vererbung wird hierbei nicht berücksichtigt.

class Sammelnussfrucht:
    pass

class Erdbeere(Sammelnussfrucht):
    pass

e = Erdbeere()
print(type(e) == Erdbeere)
# True

print(type(e) == Sammelnussfrucht)
# False

Um zu ermitteln, ob ein Objekt einer Klasse oder einer von ihrer abgeleiteten Klasse entspricht, kannst du stattdessen die Funktion isinstance verwenden.

print(isinstance(e, Erdbeere))
# True

print(isinstance(e, Sammelnussfrucht))
# True

isinstance kann im Übrigen auch mit Mehrfachvererbung verwendet werden, während dies mit type natürlich wie im Beispiel zuvor funktioniert.

class Pferd:
    pass

class Esel:
    pass

class Maultier(Pferd, Esel):
    pass

m = Maultier()
print(type(m) == Pferd)
# False
print(type(m) == Esel)
# False
print(type(m) == Maultier)
# True

print(isinstance(m, Pferd))
# True
print(isinstance(m, Esel))
# True
print(isinstance(m, Maultier))
# True

Korrekterweise würde isinstance auch ein Objekt einer anderen Klasse, die von den gleichen Klassen erbt, nicht als Instanz dieser erkennen.

class Maulesel(Esel, Pferd):
    pass

me = Maulesel()
print(isinstance(me, Maultier))
# False

3. Mit der Python type Funktion Klassen dynamisch erstellen

Normalerweise würde man eine Klasse mit dem Schlüsselwort class instanziieren. 

class Foo:
    bar = 1024

foo = Foo()

print(type(foo))
# <class '__main__.Foo'>

print(foo.bar)
# 1024

Alternativ stellt type noch 2 zusätzliche Parameter bereit. Bei einem Aufruf mit allen 3 Parametern kann man dasselbe Ergebnis wie folgt erzielen:

Foo = type('Foo', (object,), {'bar': 1024})

foo = Foo()

print(type(foo))
# <class 'type'>

print(foo.bar)
# <class '__main__.Foo'>

Der erste Parameter gibt hierbei den Namen der Klasse an, der Zweite wovon sie abgeleitet wird und der Dritte ihre Attribute.

4. Fazit

Die Funktion type ist äußerst nützlich und gehört zum Standardrepertoire der meisten Python-Entwickler. Mit ihr lässt sich einfach der Typ eines Objektes ermitteln und auch vergleichen. Zudem kann sie dynamisch Klassen erzeugen.

Hast du noch Fragen oder Anmerkungen zu dem Thema? Hat dir etwas in dem Artikel besonders gefallen oder missfallen? Lass es mich bitte mit einem Kommentar wissen!



Bislang gibt es keine Kommentare. Markier dein Revier und sei der Erste!

Schreibe einen Kommentar

Das könnte dich auch interessieren