Qual é a melhor maneira de verificar se um determinado objeto é de um determinado tipo? Que tal verificar se o objeto herda de um determinado tipo?
Digamos que eu tenho um objeto "o". Como posso verificar se ele's é um str
?
Para verificar se o
é uma instância de str
ou qualquer subclasse de str
, utilize isinstance (este seria o "canonical" way):
if isinstance(o, str):
Para verificar se o tipo de o
é exatamente str
(excluir subclasses):
if type(o) is str:
O seguinte também funciona, e pode ser útil em alguns casos:
if issubclass(type(o), str):
Veja Funções Incorporadas na Referência da Biblioteca Python para informações relevantes.
Mais uma nota: neste caso, se você'estiver usando o python 2, você pode realmente querer usar:
if isinstance(o, basestring):
porque isso também vai pegar as cordas Unicode (unicode
não é uma subclasse de str
; ambas str
e unicode
são subclasses de basetring
). Note que basetring
não existe mais no python 3, onde há's uma separação rigorosa de strings (str
) e dados binários (bytes
).
Alternativamente, a isinstância
aceita um tuple de aulas. Isto retornará True se x for uma instância de qualquer subclasse de qualquer uma das (str, unicode):
if isinstance(o, (str, unicode)):
isinstance(o, str)