Die Python type Funktion (mit Codebeispielen)

    Avatarbild von Patrick
    Patrick

    veröffentlicht am: 15.06.2020
    zuletzt aktualisiert am: 02.02.2023

    Die Python type-Funktion im Überblick

    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.

    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'>

    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

    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.

    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!

    😩 Gelangweilt von den Udemy & YouTube-Tutorials?!

    Lerne spielerisch Python und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.

    TP Star TP Star TP Star TP Star TP Star

    "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

    👋 Wir warten bereits auf dich!

    Lerne das, was du wirklich brauchst.

    Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.

    Logo von Python
    Logo von PyTorch
    Logo von Pandas
    Logo von Matplotlib
    Logo von Java
    Logo von NumPy
    Mehr erfahren

    100% kostenlos registrieren · keine Zahlungsdaten notwendig