CodeGym /Kurse /Python SELF DE /Typüberprüfung

Typüberprüfung

Python SELF DE
Level 16 , Lektion 3
Verfügbar

9.1 Die Funktion type()

In Python gibt es einige eingebaute Funktionen zur Überprüfung der Typen und Klassen von Objekten. Diese Funktionen sind nützlich, um flexiblen und sicheren Code zu schreiben, der mit verschiedenen Datentypen arbeiten kann.

Unten erkläre ich die beliebtesten davon: type(), isinstance(), issubclass() sowie Funktionen für Typannotationen, wie getattr() und hasattr().

Die Funktion type()

Die Funktion type() gibt den Typ eines Objekts zurück. Du hast sicher schon mit ihr gearbeitet, oder?


x = 10
print(type(x))  # Ausgabe: <class 'int'>

Aber was du vielleicht nicht weißt, ist, dass du mit ihr auch neue Klassen erstellen kannst!

Erstellen einer neuen Klasse

Wenn man ihr drei Argumente übergibt, erstellt sie einen neuen Typ (Klasse).

Die Signatur dieser Operation lautet:


type(name, bases, dict)

wo:

  • name — der Name der zu erstellenden Klasse (String).
  • bases — ein Tuple von Basisklassen (Eltern), von denen die neue Klasse erbt.
  • dict — ein Dictionary, das die Attribute und Methoden der neuen Klasse enthält.

Erstellen einer einfachen Klasse:


MyClass = type('MyClass', (), {'say_hello': lambda self: print("Hello!")})

# Erstellen einer Instanz der Klasse
instance = MyClass()
instance.say_hello()  # Ausgabe: Hello!

Man kann sogar etwas Komplexeres erstellen:


MyClass = type('MyClass', (), {
    'attribute': 42,
    '__init__': lambda self, value: setattr(self, 'value', value),
    'display_value': lambda self: print(self.value)
})
            
# Erstellen einer Instanz der Klasse
instance = MyClass(10)
print(instance.attribute)  # Ausgabe: 42
instance.display_value()  # Ausgabe: 10

Jetzt kannst du also nicht nur den Typ eines Objekts bestimmen, sondern auch eine Klasse erstellen, Objekte davon erzeugen und dann ihre Typen bestimmen.

9.2 Die Funktion isinstance()

Die Funktion isinstance() ist eine eingebaute Funktion in Python, die verwendet wird, um die Zugehörigkeit eines Objekts zu einer bestimmten Klasse oder einem Tuple von Klassen zu überprüfen. Sie gibt True zurück, wenn das Objekt eine Instanz der angegebenen Klasse oder einer beliebigen der angegebenen Klassen im Tuple ist, und False andernfalls.

Signatur und Parameter:


isinstance(object, classinfo)

wo:

  • object — das Objekt, dessen Zugehörigkeit zu einer Klasse oder Klassen überprüft werden muss.
  • classinfo — eine Klasse, ein Typ oder ein Tuple von Klassen und Typen, gegen die das Objekt überprüft wird.

Beispiele für die Verwendung:

Überprüfung der Zugehörigkeit zu einer Klasse


x = 10
print(isinstance(x, int))  # Ausgabe: True
            
y = "Hello"
print(isinstance(y, str))  # Ausgabe: True

Überprüfung der Zugehörigkeit zu mehreren Klassen — zumindest einer:


x = 10
print(isinstance(x, (int, float)))  # Ausgabe: True
            
y = "Hello"
print(isinstance(y, (int, str)))  # Ausgabe: True
            
z = 3.14
print(isinstance(z, (int, str)))  # Ausgabe: False

Überprüfung der Zugehörigkeit zu benutzerdefinierten Klassen


class Animal:
    pass
        
class Dog(Animal):
    pass
        
dog = Dog()
        
print(isinstance(dog, Dog))  # Ausgabe: True
print(isinstance(dog, Animal))  # Ausgabe: True

Im Gegensatz zum direkten Typvergleich mit type(), funktioniert isinstance() korrekt mit Vererbung und überprüft die Zugehörigkeit eines Objekts zu jeder Klasse in der Hierarchie.

9.3 Die Funktion issubclass()

Die Funktion issubclass() ist eine eingebaute Funktion in Python, die verwendet wird, um zu überprüfen, ob eine angegebene Klasse ein Unterklasse einer anderen Klasse oder einer der Klassen im Tuple ist. Diese Funktion gibt True zurück, wenn das erste Argument tatsächlich eine Unterklasse des zweiten ist, und False andernfalls.

Signatur und Parameter:


issubclass(class, classinfo)

wo:

  • class — die Klasse, deren Zugehörigkeit zu einer Klasse oder Klassen überprüft werden muss.
  • classinfo — eine Klasse, ein Typ oder ein Tuple von Klassen und Typen, gegen die das erste Argument überprüft wird.

Beispiele für die Verwendung:

Überprüfung der Zugehörigkeit zu einer Klasse



class Animal:
    pass
         
class Dog(Animal):
    pass
        
print(issubclass(Dog, Animal))  # Ausgabe: True
print(issubclass(Animal, Dog))  # Ausgabe: False 

Überprüfung der Zugehörigkeit zu mehreren Klassen — zumindest eine:


class Animal:
    pass
        
class Dog(Animal):
    pass
        
class Cat(Animal):
    pass
        
print(issubclass(Dog, (Animal, Cat)))  # Ausgabe: True
print(issubclass(Dog, (Cat,)))  # Ausgabe: False

Beispiele mit benutzerdefinierten Klassen

Vererbung von eingebauten Klassen


class MyInt(int):
    pass
        
print(issubclass(MyInt, int))  # Ausgabe: True
print(issubclass(int, MyInt))  # Ausgabe: False

Vererbungshierarchie


class A:
    pass
        
class B(A):
    pass
        
class C(B):
    pass
        
print(issubclass(C, A))  # Ausgabe: True
print(issubclass(C, B))  # Ausgabe: True
print(issubclass(B, A))  # Ausgabe: True
print(issubclass(A, C))  # Ausgabe: False

Vorteile der Verwendung von issubclass()

Überprüfung der Klassenhierarchie: issubclass() ermöglicht die Überprüfung der Klassenhierarchie, was nützlich ist, um die Richtigkeit der Vererbung und der Code-Struktur sicherzustellen.

Flexibilität: Die Funktion unterstützt die Überprüfung von einer Klasse oder einem Tuple von Klassen, was sie flexibel für den Einsatz in verschiedenen Szenarien macht.

Nützlichkeit für Metaprogrammierung: issubclass() wird oft in der Metaprogrammierung verwendet und beim Schreiben von Code, der mit dynamischen Typen und Klassen arbeitet. Darüber werden wir noch lange sprechen :)

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION