Jak sprawdzić typ danych w Pythonie (typ vs isinstance)
Dowiedz się, jak sprawdzać typy danych w Pythonie. Dowiedz się, kiedy używać type() a kiedy isinstance(), obsługuj klasy niestandardowe i pisz bezpieczne sprawdzanie poprawności typu.
Przegląd
Python jest językiem dynamicznie typowanym, co oznacza, że zmienne mogą przechowywać wartości dowolnego typu danych, a ich typ może zmieniać się podczas wykonywania. Chociaż ta elastyczność przyspiesza początkowe programowanie, wymaga również sprawdzenia typów zmiennych w czasie wykonywania przed uruchomieniem operacji specyficznych dla typu, takich jak wykonywanie arytmetyki na liczbach całkowitych lub wywoływanie metod łańcuchowych.
Aby sprawdzić typ danych obiektu, Python udostępnia dwie podstawowe funkcje: „type()” i „isinstance()”. Funkcja `type(obj)` zwraca dokładny typ klasy obiektu. Chociaż możesz użyć `type(obj) == int` do sprawdzenia, czy liczba jest liczbą całkowitą, ta metoda jest generalnie odradzana, ponieważ nie obsługuje struktur dziedziczenia (podklasa liczby całkowitej dałaby wartość `False`).
Zalecanym, Pythonicznym sposobem sprawdzania typów jest `isinstance(obj, class_info)`. Ta funkcja sprawdza, czy obiekt jest instancją określonej klasy lub jakiejś podklasy z niej odziedziczonej. Obsługuje także sprawdzanie krotki klas (np. `isinstance(value, (int, float))`), dzięki czemu kod walidacyjny jest bardzo elastyczny i solidny.
Dane wyjściowe kodu i wykonania
Ten skrypt demonstruje sprawdzanie typów zmiennych przy użyciu funkcji type() i isinstance(), pokazując różnice w dziedziczeniu.
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: FalseWdrażanie krok po kroku
- Użyj isinstance(zmienna, nazwa_typu) do ogólnego sprawdzania typu (zgodnie z dziedziczeniem).
- Przekaż krotkę typów, takich jak isinstance(variable, (int, float)), aby sprawdzić wiele klas.
- Użyj type(variable) to type_name tylko wtedy, gdy musisz zagwarantować dokładne dopasowanie klasy, ignorując podklasy.
Często zadawane pytania
Dlaczego funkcja isinstance() jest preferowana zamiast type()?
isinstance() obsługuje dziedziczenie obiektów i polimorfizm. Jeśli podklasujesz typ wbudowany, funkcja isinstance() poprawnie rozpozna go jako instancję klasy nadrzędnej, podczas gdy type() zwróci wartość False.
Jak mogę sprawdzić, czy obiekt można wywołać (jak funkcja)?
Użyj wbudowanej funkcji callable(), która zwraca True, jeśli obiekt można wywołać jak funkcję.
Powiązane tematy
Dowiedz się, jak utworzyć klasę w Pythonie. Opanuj konstruktora __init__, metody instancji, słowo kluczowe self i tworzenie instancji obiektów.
Jak obsługiwać wyjątki w PythonieDowiedz się, jak obsługiwać wyjątki w Pythonie za pomocą bloków try, z wyjątkiem, else i wreszcie. Napisz bezbłędny i odporny na awarie kod w Pythonie.
Polecane zasoby Pythona
Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.
Wskazówki dotyczące typów Pythona
Dowiedz się, jak pisać wskazówki dotyczące typów w Pythonie. Popraw jakość kodu, włącz autouzupełnianie i wykorzystaj mypy do statycznej analizy kodu.
Ściągawka dotycząca konwersji typów Pythona
Naucz się niejawnych i jawnych konwersji typów w Pythonie. Konwertuj między ciągami, liczbami całkowitymi, zmiennoprzecinkowymi, listami, zestawami i słownikami.
Python kontra TypeScript: dynamiczne skrypty a sieć bezpieczna dla typów
Porównaj Python i TypeScript. Dowiedz się o systemach typów strukturalnych, metadanych dekoratorów, kontrolach kompilatora, środowiskach wykonawczych sieci Web i narzędziach dla programistów.