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. Python 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!
Schreibe einen Kommentar