4.4 Introspecção e reflexão
Introspecção e reflexão são propriedades de sistemas orientados a
objetos que qualificam a existência de mecanismos para descobrir e
alterar, em tempo de execução, informações estruturais sobre um programa
e objetos existentes neste.
Python possui tanto características introspectivas quanto reflexivas.
Permite obter em tempo de execução informações a respeito do tipo dos
objetos, incluindo informações sobre a hierarquia de classes. Preserva
também metadados que descrevem a estrutura do programa sendo
executado, e permitindo que se estude como está organizado este sem a
necessidade de ler o seu código-fonte.
Algumas funções e atributos são particularmente importantes neste
sentido, e são apresentadas nesta seção:
- dir(obj): esta função pré-definida lista todos os nomes de
variáveis definidos em um determinado objeto; foi apresentada
anteriormente como uma forma de obter as variáveis definidas em um
módulo, e aqui pode ser descrita em sua glória completa: descreve o
conteúdo de qualquer objeto Python, incluindo classes e instâncias.
- obj.__class__: este atributo da instância armazena o
seu objeto classe correspondente.
- obj.__dict__: este atributo de instâncias e classes
oferece acesso ao seu estado local.
- obj.__module__: este atributo de instâncias e classes
armazena uma string com o nome do módulo do qual foi importado.
- classe.__bases__: esta atributo da classe armazena em
uma tupla as classes das quais herda.
- classe.__name__: este atributo da classe armazena uma
string com o nome da classe.