Como verificar o tipo de dados em Python (type vs isinstance)
Aprenda como verificar tipos de dados em Python. Entenda quando usar type() vs isinstance(), lidar com classes personalizadas e escrever validações de verificação de tipo seguras.
Visão geral
Python é uma linguagem de tipo dinâmico, o que significa que variáveis podem conter valores de qualquer tipo de dados e seu tipo pode mudar durante a execução. Embora essa flexibilidade acelere o desenvolvimento inicial, ela também exige que você verifique os tipos de variáveis em tempo de execução antes de executar operações específicas de tipo, como realizar aritmética em números inteiros ou chamar métodos de string.
Para verificar o tipo de dados de um objeto, Python fornece duas funções principais: `type()` e `isinstance()`. A função `type(obj)` retorna o tipo de classe preciso do objeto. Embora você possa usar `type(obj) == int` para verificar se um número é um número inteiro, esse método geralmente é desencorajado porque não suporta estruturas de herança (uma subclasse de um número inteiro seria avaliada como `False`).
A maneira Python recomendada de verificar tipos é `isinstance(obj, class_info)`. Esta função verifica se um objeto é uma instância da classe especificada ou de qualquer subclasse herdada dela. Ele também suporta verificação em uma tupla de classes (por exemplo, `isinstance(value, (int, float))`), tornando o código de validação altamente flexível e robusto.
Saída de código e execução
Este script demonstra a verificação de tipos de variáveis usando type() e isinstance(), mostrando as diferenças na herança.
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: FalseImplementação passo a passo
- Use isinstance(variable, type_name) para verificação geral de tipo (em conformidade com herança).
- Passe uma tupla de tipos como isinstance(variable, (int, float)) para verificar múltiplas classes.
- Use type(variable) is type_name somente quando você precisar garantir a correspondência exata da classe, ignorando as subclasses.
Perguntas frequentes
Por que isinstance() é preferível a type()?
isinstance() suporta herança e polimorfismo de objetos. Se você criar uma subclasse de um tipo integrado, isinstance() irá reconhecê-lo corretamente como uma instância da classe pai, enquanto type() será avaliado como False.
Como posso verificar se um objeto pode ser chamado (como uma função)?
Use a função callable() integrada, que retorna True se o objeto puder ser invocado como uma função.
Tópicos Relacionados
Aprenda como criar uma classe em Python. Domine o construtor __init__, métodos de instância, palavra-chave self e instanciação de objetos.
Como lidar com exceções em PythonAprenda como lidar com exceções em Python usando blocos try, exceto, else e finalmente. Escreva código Python livre de erros e resistente a falhas.
Recursos Python recomendados
Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.
Dicas de tipo Python
Aprenda como escrever dicas de tipo em Python. Melhore a qualidade do código, habilite o preenchimento automático e aproveite o mypy para análise estática de código.
Folha de referências de conversões de tipo Python
Aprenda conversões de tipo implícitas e explícitas em Python. Converta entre strings, inteiros, flutuantes, listas, conjuntos e dicionários.
Python vs TypeScript: scripts dinâmicos vs Web com segurança de tipo
Compare Python e TypeScript. Aprenda sobre sistemas de tipo estrutural, metadados decoradores, verificações de compilador, tempos de execução da Web e ferramentas de desenvolvedor.