Introspecção (computação)
Em computação, introspecção ou introspecção de tipos, é a habilidade de um programa de examinar o tipo ou propriedades de um objeto em tempo de execução. Algumas linguagens de programação possuem esta capacidade.[1]
A introspecção não deve ser confundida com reflexão, que vai um pouco mais adiante e é a habilidade de um programa para manipular os valores, metadados, propriedades e/ou funções de um objeto em tempo de execução. Algumas linguagens de programação, por exemplo Java, também possuem esta capacidade.
Exemplos
[editar | editar código-fonte]Python
[editar | editar código-fonte]O método mais comum de introspecção em Python é usar a função dir
para detalhar os atributos de um objeto. Por exemplo:
class foo(object):
def __init__(self, val):
self.x = val
def bar(self):
return self.x
...
>>> dir(foo(5))
['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', 'bar', 'x']
Da mesma forma, as funções nativas type
e isinstance
podem ser usadas para determinar o que um objeto é enquanto hasattr
pode determinar o que um objeto faz. Por exemplo:
>>> a = foo(10)
>>> b = bar(11)
>>> type(a)
<type 'foo'>
>>> isinstance(a, foo)
True
>>> isinstance(a, type(a))
True
>>> isinstance(a, type(b))
False
>>> hasattr(a, 'bar')
True
Em Python 2, mas não em Python 3, declarar class foo
em vez de class foo(object)
resultará em type
, retornando o tipo de instância (instance
) genérico da classe.[2]