Introspecção (computação)

Origem: Wikipédia, a enciclopédia livre.
Saltar para a navegação Saltar para a pesquisa
Disambig grey.svg Nota: Este artigo é sobre computação. Para o processo psicológico, veja Introspecçã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]

Referências

Ícone de esboço Este artigo sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.