isinstance() și issubclass() în Python

Clase și obiecte Python 3.0+ (uniuni X | Y: 3.10+)

Verifică dacă un obiect este de un anumit tip, sau dacă o clasă moștenește alta.

Sintaxă
isinstance(obiect, clasa_sau_tuplu)
issubclass(clasa, clasa_sau_tuplu)

Ce face isinstance() și issubclass()

isinstance(x, int) returnează True dacă x este un int sau o subclasă a lui. Poți da un tuplu de tipuri ((int, float)) sau, din Python 3.10, o uniune int | float.

issubclass(A, B) face aceeași verificare pentru clase: dacă A moștenește (direct sau indirect) B. Orice clasă este subclasă a ei înseși.

Parametri

Parametru Descriere
obiect / clasa Obiectul sau clasa verificată.
clasa_sau_tuplu O clasă, un tuplu de clase sau o uniune A | B.

Ce returnează

True sau False.

Exemple

Exemplul 1: Verificarea tipurilor

def dublu(x):
    if isinstance(x, (int, float)):
        return x * 2
    if isinstance(x, str):
        return x + x
    raise TypeError(f"tip nesuportat: {type(x).__name__}")

print(dublu(21), dublu(1.5), dublu("ha"))
print(isinstance(True, int), isinstance(3, int | float))

Rezultat

42 3.0 haha
True True

Exemplul 2: Moștenire

class Animal: pass
class Caine(Animal): pass

print(issubclass(Caine, Animal), issubclass(Animal, Caine))
print(isinstance(Caine(), Animal))
print(issubclass(bool, int))

Rezultat

True False
True
True

Greșeli frecvente

  • Folosești isinstance(x, list) peste tot și blochezi alte colecții valide (tupluri, generatoare). Verifică tipul doar când este necesar.

Comenzi înrudite

  • type(): Returnează tipul unei valori (int, str, list…) sau, cu trei argumente, creează o clasă nouă.
  • class: Definește o clasă: un șablon pentru obiecte care au date (atribute) și comportament (metode).
  • super(): Apelează metoda clasei părinte dintr-o clasă care o moștenește.