Isinstance w Python – praktyczny przewodnik

isinstance w Python to wbudowana funkcja służąca do sprawdzania, czy obiekt jest instancją określonego typu lub klasy, co jest kluczowe w dynamicznie typowanych językach, takich jak Python. Daje programiście kontrolę nad typami danych, pozwala na bezpieczniejsze operacje, lepszą obsługę błędów i czytelniejszy kod.

Podstawy isinstance: składnia i zastosowanie

  • Składnia
isinstance(obj, classinfo)
  • obj – obiekt, którego typ sprawdzamy,
  • classinfo – klasa, typ lub krotka klas/typów,
  • Zwracana wartość
  • True jeśli obiekt jest instancją podanego typu lub jednej z klas w krotce,
  • False w przeciwnym przypadku.

Przykłady użycia

  • Prosta kontrola typu

a = 5
print(isinstance(a, int)) # True
print(isinstance(a, str)) # False
  • Sprawdzanie kilku typów jednocześnie

b = [10, 20, 37]
print(isinstance(b, (int, list, str))) # True, bo b jest listą
  • Sprawdzanie typów własnych klas oraz dziedziczenia

class Animal:
    pass

class Dog(Animal):
    pass

dog = Dog()
print(isinstance(dog, Dog)) # True
print(isinstance(dog, Animal)) # True, bo Dog dziedziczy po Animal
  • Sprawdzanie typów z modułów wbudowanych

text = "Hello"
print(isinstance(text, str)) # True

Zastosowania praktyczne

isinstance używamy, gdy:

  • Piszesz funkcje obsługujące różne typy danych (np. liczby całkowite, listy, słowniki),
  • Walidujesz argumenty wejściowe w klasach/funkcjach przed dalszą obróbką,
  • Chcesz obsłużyć dziedziczenie – uznasz klasy potomne za pasujące do klasy bazowej.

Przykład walidacji argumentów:


def add_numbers(a, b):
    if isinstance(a, (int, float)) and isinstance(b, (int, float)):
        return a + b
    raise TypeError("Argumenty muszą być liczbami.")

Isinstance vs. type – różnice i dobre praktyki

  • type(obj) is typ – sprawdza dokładny typ;
  • isinstance(obj, typ) – uwzględnia dziedziczenie, więc typ pochodny zostanie uznany za pasujący do klasy bazowej.

Kiedy stosować?

  • Preferuj isinstance – kod bardziej elastyczny i zgodny z zasadą polimorfizmu.

Sprawdzanie wielu typów naraz

Możesz sprawdzić, czy obiekt pasuje do którejkolwiek klasy z krotki typów:


value = "tekst"
print(isinstance(value, (int, float, str))) # True, bo value jest str

Obsługa typów własnych, dziedziczenie i polimorfizm

isinstance obsługuje klasy wbudowane i własne klasy oraz rozpoznaje relacje dziedziczenia:

  • Obiekt klasy pochodnej zwróci True przy sprawdzaniu typu klasy bazowej,
  • Pozwala stosować polimorfizm, np. przy przetwarzaniu kolekcji obiektów różnych klas dziedziczących po jednej bazowej.

Pułapki i błędy użycia

  • Niepoprawne przekazanie klasy
    Drugim argumentem musi być klasa, typ lub krotka klas/typów; przekazanie np. stringa wywoła błąd TypeError;
  • Zbyt rygorystyczne sprawdzanie dokładnego typu
    Użycie type(obj) is typ zamiast isinstance zablokuje dziedziczenie i polimorfizm.

Podsumowanie dobrych praktyk

  • Używaj isinstance zawsze, gdy chcesz obsłużyć typ wraz z dziedziczeniem i polimorfizmem;
  • Stosuj tuple typów w sprawdzaniach “wielotypowych”;
  • Wyłapuj błędne typy już na etapie walidacji danych wejściowych (np. w funkcjach, metodach, API).

Najczęściej stosowane typy w Pythonie

  • int – liczby całkowite;
  • float – liczby zmiennoprzecinkowe;
  • str – tekst;
  • list – listy;
  • tuple – krotki;
  • dict – słowniki.

Przykład:


for item in [3, 5.7, "abc", [1,2], (3,4), {"a":1}]:
    print(isinstance(item, (int, float, str, list, tuple, dict))) # Zwraca True dla każdego typu z tupli

isinstance to nieodzowne narzędzie każdego programisty Pythona – zwiększa czytelność kodu, zapobiega błędom i ułatwia pracę z różnorodnymi typami danych.

Programista i twórca serwisu Creative Coding, absolwent Politechniki Warszawskiej (WEiTI). Od 10+ lat łączy front‑end, grafikę generatywną i narzędzia dla twórców; opublikował 120+ projektów i artykułów, prowadził warsztaty dla 2 000+ uczestników. Pracuje z JavaScriptem, Three.js, P5.js i GLSL, bada wydajność i dokumentuje procesy, tworząc praktyczne przewodniki dla osób łączących kod z obrazem, dźwiękiem i interakcją.
Zostaw komentarz

Komentarze

Brak komentarzy. Dlaczego nie rozpoczniesz dyskusji?

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *