Python / type() / Verificar o tipo de um valor
Em Python, type(value) retorna o objeto de tipo real de um valor, não uma string como "int". Para verificar o tipo exato, use type(value) is int. Para verificações comuns que aceitam subclasses, use isinstance().
Uso básico e objeto retornado
Com um argumento, type() retorna o tipo desse objeto. Tipos também são objetos, assim como números, strings e coleções. O shell interativo mostra resultados de expressões; um script precisa de print() ou outro mecanismo de exibição.
Os exemplos funcionam com Python 3.12. Salve cada código completo em UTF-8 como type_example.py e execute python type_example.py, ou python3 conforme sua instalação. Substitua o conteúdo para testes independentes.
values = (123, 12.3, "abc", [1, 2], (1, 2), {"a": 1}, {1, 2}, 1 + 2j, True, None)
for value in values:
print(type(value))
Resultado esperado:
<class 'int'>
<class 'float'>
<class 'str'>
<class 'list'>
<class 'tuple'>
<class 'dict'>
<class 'set'>
<class 'complex'>
<class 'bool'>
<class 'NoneType'>
<class 'int'> é a representação do objeto de tipo inteiro. Compará-lo com uma string não verifica o tipo. __name__ fornece um nome legível, mas classes diferentes podem compartilhar nomes: compare objetos de tipo para decidir.
kind = type(123)
print(kind is int)
print(kind == "int")
print(kind.__name__)
True
False
int
A forma de três argumentos type(name, bases, dict) cria uma nova classe. Diferencie esse uso da inspeção com um argumento.
Tipo exato e isinstance()
type(value) is T exige exatamente T. isinstance(value, T) aceita também subclasses e é útil com herança. O exemplo completo define Dog como subclasse de Animal e compara tipos numéricos.
class Animal:
pass
class Dog(Animal):
pass
pet = Dog()
print(type(pet).__name__)
print(type(pet) is Animal)
print(isinstance(pet, Animal))
print(type(True) is int)
print(isinstance(True, int))
print(isinstance(3, (int, float)))
Dog
False
True
False
True
True
O tipo real de um Dog é Dog, mas ele é uma instância de Animal. Além disso, bool é subclasse de int, portanto isinstance(True, int) é verdadeiro. Se uma contagem deve rejeitar booleanos, exija int exato ou exclua bool separadamente. Uma tupla de tipos permite várias alternativas.
Reatribuir uma variável a outro tipo
Ao entender objetos e tipos de Python, diferencie o nome do objeto atualmente referenciado. Atribuir uma string ao mesmo nome não transforma o objeto inteiro anterior em string.
value = 123
original = value
print(type(value).__name__)
value = "123"
print(type(value).__name__)
print(type(original).__name__)
int
str
int
Inicialmente ambos os nomes apontam para o mesmo inteiro. Depois de value = "123", value aponta para uma string e original mantém o inteiro. Essa nova vinculação é diferente de converter valores com int() ou str().
Tipo do contêiner, conteúdo e anotações
type(values) não verifica o tipo de todos os elementos. Uma anotação de tipo como list[int] não obriga Python a validar ou converter os elementos automaticamente durante a execução.
values: list[int] = [1, "2"]
print(type(values).__name__)
print(all(type(item) is int for item in values))
try:
print(isinstance(values, list[int]))
except TypeError:
print("TypeError")
list
False
TypeError
A lista pode conter a string "2" apesar da anotação int. A verificação exata por elemento retorna falso. Passar list[int] como segundo argumento de isinstance() gera TypeError. Separe a verificação do contêiner de seu esquema interno e use também os avisos de um verificador estático.
Verificar None e as condições do valor
None é um objeto distinto que representa ausência; value is None o verifica claramente. Um tipo correto não garante um valor válido para a aplicação. Esta função aceita inteiros exatos não negativos e exclui bool.
value = None
print(value is None)
print(type(value).__name__)
def valid_count(value):
return type(value) is int and value >= 0
for value in (3, -1, True, "3", None):
print(repr(value), valid_count(value))
True
NoneType
3 True
-1 False
True False
'3' False
None False
and pula a comparação quando o tipo é incorreto, evitando >= 0 em strings ou None. Já -1 é inteiro, mas falha na condição do valor. Decida entre converter a entrada e restringir tipos e acrescente intervalo, valores ausentes e requisitos de formato.




