veröffentlicht am: 15.06.2020 zuletzt aktualisiert am: 02.02.2023
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.
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'>
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
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.
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!
😩 Gelangweilt von den Udemy & YouTube-Tutorials?!
Lerne spielerisch Python und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.
"Für Leute die gerne Python oder Java lernen wollen ist Codegree klasse. Ist nicht wie bei anderen Konkurrenten auf Videokursen aufgebaut..."
- Lennart Sparbier
100% kostenlos registrieren · keine Kreditkarte notwendig
Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.
100% kostenlos registrieren · keine Zahlungsdaten notwendig