Existem duas funções internas que ajudam a identificar o tipo de um objeto. Você pode usar type()
se precisar o tipo exato de um objeto, e isinstance()
para verificar o tipo de um objeto contra alguma coisa. Geralmente, você deseja usar na isistance()
maioria das vezes, uma vez que é muito robusto e também suporta herança de tipo.
Para obter o tipo real de um objeto, use a type()
função interna. Passar um objeto como o único parâmetro retornará o objeto de tipo desse objeto:
>>> type([]) is list
True
>>> type({}) is dict
True
>>> type('') is str
True
>>> type(0) is int
True
Obviamente, isso também funciona para tipos personalizados:
>>> class Test1 (object):
pass
>>> class Test2 (Test1):
pass
>>> a = Test1()
>>> b = Test2()
>>> type(a) is Test1
True
>>> type(b) is Test2
True
Observe que type()
retornará apenas o tipo imediato do objeto, mas não poderá informar sobre a herança do tipo.
>>> type(b) is Test1
False
Para cobrir isso, você deve usar a isinstance
função Obviamente, isso também funciona para tipos internos:
>>> isinstance(b, Test1)
True
>>> isinstance(b, Test2)
True
>>> isinstance(a, Test1)
True
>>> isinstance(a, Test2)
False
>>> isinstance([], list)
True
>>> isinstance({}, dict)
True
isinstance()
geralmente é a maneira preferida de garantir o tipo de um objeto, porque ele também aceita tipos derivados. Portanto, a menos que você realmente precise do objeto de texto (por qualquer motivo), o uso isinstance()
é preferível type()
.
O segundo parâmetro de isinstance()
também aceita uma tupla de tipos, portanto, é possível verificar vários tipos de uma só vez. isinstance
retornará true, se o objeto for de um desses tipos:
>>> isinstance([], (tuple, list, set))
True