So überprüfen Sie den Datentyp in Python (Typ vs. isinstance)
Erfahren Sie, wie Sie Datentypen in Python überprüfen. Verstehen Sie, wann type() vs. isinstance() zu verwenden ist, benutzerdefinierte Klassen verarbeiten und sichere Typprüfungsvalidierungen schreiben sollten.
Übersicht
Python ist eine dynamisch typisierte Sprache, was bedeutet, dass Variablen Werte jedes Datentyps enthalten können und sich ihr Typ während der Ausführung ändern kann. Diese Flexibilität beschleunigt zwar die anfängliche Entwicklung, erfordert aber auch, dass Sie Variablentypen zur Laufzeit überprüfen, bevor Sie typspezifische Vorgänge ausführen, z. B. Arithmetik für Ganzzahlen oder Aufrufen von String-Methoden.
Um den Datentyp eines Objekts zu überprüfen, bietet Python zwei Hauptfunktionen: „type()“ und „isinstance()“. Die Funktion „type(obj)“ gibt den genauen Klassentyp des Objekts zurück. Während Sie „type(obj) == int“ verwenden können, um zu überprüfen, ob eine Zahl eine Ganzzahl ist, wird von dieser Methode im Allgemeinen abgeraten, da sie keine Vererbungsstrukturen unterstützt (eine Unterklasse einer Ganzzahl würde als „Falsch“ ausgewertet).
Die empfohlene pythonische Methode zum Überprüfen von Typen ist „isinstance(obj, class_info)“. Diese Funktion prüft, ob ein Objekt eine Instanz der angegebenen Klasse oder einer von ihr geerbten Unterklasse ist. Es unterstützt auch die Prüfung anhand eines Tupels von Klassen (z. B. „isinstance(value, (int, float))“), wodurch der Validierungscode äußerst flexibel und robust wird.
Code- und Ausführungsausgabe
Dieses Skript demonstriert die Überprüfung von Variablentypen mit type() und isinstance() und zeigt die Unterschiede bei der Vererbung.
value_int = 42
value_str = "hello"
# 1. Checking type using isinstance() (Recommended)
is_number = isinstance(value_int, int)
print(f"Is {value_int} an int? {is_number}")
# Checking against multiple possible types
is_num_or_str = isinstance(value_str, (int, float, str))
print(f"Is '{value_str}' int, float, or str? {is_num_or_str}")
# 2. Checking type using type() (For exact class matches)
print(f"Exact type of value_int: {type(value_int).__name__}")
print("Is value_int exactly an int?", type(value_int) is int)
# 3. Inheritance difference
class CustomList(list):
pass
my_list = CustomList([1, 2, 3])
print("\nInheritance testing:")
print("isinstance(my_list, list):", isinstance(my_list, list))
print("type(my_list) is list:", type(my_list) is list)Is 42 an int? True
Is 'hello' int, float, or str? True
Exact type of value_int: int
Is value_int exactly an int? True
Inheritance testing:
isinstance(my_list, list): True
type(my_list) is list: FalseSchrittweise Umsetzung
- Verwenden Sie isinstance(variable, type_name) für die allgemeine Typprüfung (gemäß Vererbung).
- Übergeben Sie ein Tupel von Typen wie isinstance(variable, (int, float)), um es mit mehreren Klassen zu vergleichen.
- Verwenden Sie „type(variable) is type_name“ nur, wenn Sie die exakte Klassenübereinstimmung garantieren müssen und Unterklassen ignorieren.
Häufig gestellte Fragen
Warum wird isinstance() gegenüber type() bevorzugt?
isinstance() unterstützt Objektvererbung und Polymorphismus. Wenn Sie einen integrierten Typ in eine Unterklasse umwandeln, erkennt isinstance() ihn korrekt als Instanz der übergeordneten Klasse, während type() als False ausgewertet wird.
Wie kann ich überprüfen, ob ein Objekt aufrufbar ist (wie eine Funktion)?
Verwenden Sie die integrierte Funktion callable(), die True zurückgibt, wenn das Objekt wie eine Funktion aufgerufen werden kann.
Verwandte Themen
Erfahren Sie, wie Sie eine Klasse in Python erstellen. Beherrschen Sie den __init__-Konstruktor, die Instanzmethoden, das Schlüsselwort self und die Objektinstanziierung.
So behandeln Sie Ausnahmen in PythonErfahren Sie, wie Sie Ausnahmen in Python mithilfe der Blöcke „try“, „exclusive“, „else“ und „finally“ behandeln. Schreiben Sie fehlerfreien und absturzsicheren Python-Code.
Empfohlene Python-Ressourcen
Erweitern Sie Ihr Wissen mit zugehörigen interaktiven Tutorials, Spickzetteln und Codevergleichen.
Hinweise zum Python-Typ
Erfahren Sie, wie Sie Typhinweise in Python schreiben. Verbessern Sie die Codequalität, aktivieren Sie die automatische Vervollständigung und nutzen Sie mypy für die statische Codeanalyse.
Spickzettel für Python-Typkonvertierungen
Lernen Sie implizite und explizite Typkonvertierungen in Python. Konvertieren Sie zwischen Zeichenfolgen, Ganzzahlen, Gleitkommazahlen, Listen, Mengen und Wörterbüchern.
Python vs. TypeScript: Dynamisches Scripting vs. typsicheres Web
Vergleichen Sie Python und TypeScript. Erfahren Sie mehr über Strukturtypsysteme, Decorator-Metadaten, Compilerprüfungen, Web-Laufzeiten und Entwicklertools.