HOWTO · Python

Verificar tipo de variável em Python

Aprenda a verificar o tipo de um valor com as funções `type()` e `isinstance()` do Python.

Nesta página

Use type(value) para ver o tipo do valor ou isinstance(value, SomeType) para verificar se ele pertence a um tipo, inclusive a uma subclasse. Em Python, variáveis são nomes associados a objetos; por isso, você inspeciona o valor, e não um tipo declarado para a variável.

Variáveis e seus tipos em Python

Um nome em Python se refere a um objeto, e esse objeto tem um tipo. Ao atribuir um valor, você associa um nome a esse objeto; não declara o tipo do nome antecipadamente. Por exemplo, 42, 3.5, "hello", True e [1, 2] são valores dos tipos int, float, str, bool e list, respectivamente. Mais tarde, o mesmo nome pode se referir a um objeto de outro tipo.

Como verificar o tipo de uma variável em Python

Para uma inspeção rápida, passe o valor para type(); use isinstance() quando seu código precisar de uma verificação de tipo que retorne um valor booleano. O exemplo a seguir mostra as duas abordagens com um número inteiro e uma string. Ele é independente; execute-o com Python para ver os resultados impressos.

count = 50
label = "Ada"

print(type(count))
print(type(label))
print(isinstance(count, int))
print(isinstance(label, int))
<class 'int'>
<class 'str'>
True
False

Use a função type() para verificar o tipo de uma variável em Python

A função integrada type() retorna o objeto de tipo correspondente ao valor recebido. Quando impressos, tipos integrados comuns aparecem em formatos como <class 'int'>, <class 'float'> e <class 'str'>. Isso é útil para inspecionar um valor durante a depuração ou escolher um comportamento com base no tipo exato dele.

Por exemplo, type(50) é int, type(10.5) é float e type("Ada") é str. Chamar type() informa o que um objeto é; não o converte para outro tipo.

Use a função isinstance() para verificar o tipo de uma variável em Python

Use isinstance(value, classinfo) para obter True ou False, conforme value seja ou não uma instância da classe ou das classes especificadas. Diferentemente da comparação direta do resultado de type(value) com uma classe, isinstance() também reconhece subclasses. Por isso, é uma boa opção para verificações que devem aceitar uma classe e suas subclasses.

class Animal:
    pass

class Dog(Animal):
    pass

pet = Dog()
print(isinstance(pet, Dog))
print(isinstance(pet, Animal))
print(type(pet) is Dog)
True
True
True

Neste exemplo, as duas verificações com isinstance() são verdadeiras porque Dog deriva de Animal; a comparação de tipo exato também é verdadeira porque pet foi criado como um Dog. Use type(value) is SomeType somente quando for necessário exigir uma correspondência exata de tipo. Inspecionar o tipo e verificar a instância não altera o tipo de um valor.

Essa distinção importa quando uma função foi projetada para trabalhar com uma classe base e quaisquer objetos especializados derivados dela. Por exemplo, um código que aceita um Animal muitas vezes também pode lidar com um Dog pela mesma interface; portanto, isinstance(pet, Animal) expressa esse contrato. Uma verificação exata, como type(pet) is Animal, rejeitaria um Dog, embora ele herde de Animal. Reserve verificações de tipo exato para casos em que as subclasses precisem ser tratadas de outra forma ou não sejam explicitamente aceitas. Em código polimórfico comum, a verificação que reconhece subclasses costuma ser mais flexível.