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.