• P.O.O
  • Conceitos de P.O.O

Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

Reflection, ou inspect, diz respeito a ter acesso aos recursos de um objeto, como métodos e atributos, em tempo de execução. Em Python, para ter acesso aos recursos de um objeto podemos utilizar funções nativas e package inspect.

Nesta parte do tutorial vamos aprender a utilizar algumas funções básicas nativas e também dos packages inspect e types.

Para recuperar o tipo de um objeto, utilizamos a função type como mostrado na sintaxe a seguir.

Sintaxe
type(object)
Retorno
string contendo tipo de dado 
Exemplo 1
classe_anonima = type('classe_anonima',(),
{
    'campo1':5,
    'campo2':"string"
})

obj = classe_anonima()
print(type(obj))
Saída
<class '__main__.classe_anonima'>

A função isinstanceof checa se um objeto é uma instância de uma classe. Esse método retorna um booleano.

Sintaxe
isinstance(object, class)
Retorno
True se é instância, False caso contrário
Exemplo 2
classe_anonima = type('classe_anonima',(),
{
    'campo1':5,
    'campo2':"string"
})

obj = classe_anonima()

print(type(obj))
print(isinstance(obj,classe_anonima))
Saída
True

Com a função isclass do package inspect podemos verificar se um objeto é uma classe ou não.

Sintaxe
inspect.isclass(object)
Retorno
True se é classe, False caso contrário.
Exemplo 3
import inspect

class test:
    pass

print(inspect.isclass(test));
Saída
True

A função callable é usada para verificar se um objeto é invocável ou não. Funções e métodos podem ser checados com essa função.

Sintaxe
callable(object)
Retorno
True se é invocável, False caso contrário.
Exemplo 4
def funcao():
    ''' funcao para teste '''
    pass

print(callable(funcao))
Saída
True

Fazendo uso da função isfunction, podemos verificar se uma objeto é uma função ou não. Um booleano é retornado.

Sintaxe
isfunction(object)
Retorno
True se é função, False caso contrário.
Exemplo 5
import inspect

def funcao():
    ''' funcao para teste    '''
    pass

print(inspect.isfunction(funcao))
Saída
True

A função hasattr verifica se um objeto possui ou contém um determinado atributo ou campo declarado.

Sintaxe
hasattr(object, attribute)
Retorno
True se possui atributo, False caso contrário
Exemplo 6
classe_anonima = type('classe_anonima',(),
{
    'campo1':5,
    'campo2':"string"
})

obj = classe_anonima()
print(hasattr(obj,"campo1"))
Saída
True
Exemplo 7
classe_anonima = type('classe_anonima',(),
{
    'campo1':5,
    'campo2':"string"
})

obj = classe_anonima()
print(hasattr(obj,"campo1"))
Saída
True

Usando a função getattrib podemos recuperar o valor atribuído a um campo de um objeto. A função hasattr deve ser utilizada previamente.

Sintaxe
getattrib(object,attribute)
Retorno
object
Exemplo 7
classe_anonima = type('classe_anonima',(),
{
    'campo1':5,
    'campo2':"string"
})
obj = classe_anonima()
print(getattr(obj,"campo1"))
Saída
5

Usando a função setattrib podemos atribuir um valor a um campo de um objeto. A função hasattr deve ser utilizada previamente.

Sintaxe
setattrib(object,value)
Exemplo 8
classe_anonima = type('classe_anonima',(),
{
    'campo1':5,
    'campo2':"string"
})

obj = classe_anonima()

print(getattr(obj,"campo1"))
setattr(obj,"campo1",999)
print(getattr(obj,"campo1"))
Saída
5
999

Com o uso da função getsizeof podemo ter conhecimento da quantidade de bytes utilizada em memória para armazenar um objeto. Esse método faz parte do package sys.

Sintaxe
getsizeof(object)
Retorno
inteiro contendo tamanho de object em bytes
Exemplo 9
import sys

class test:
    pass

obj2 = test()
obj2.campo_dinamico = "string para campo dinamico"

print(sys.getsizeof(obj2));
Saída
48

Com a função MethodType do package types, podemos atribuir a um objeto um método de forma dinâmica.

Sintaxe
MethodType(metodo,classe)
Exemplo 10
from types import MethodType

def metodo(self):
    print("método dinâmico");
    
obj2.metodo = MethodType(metodo,test);
obj2.metodo();
Saída
método dinâmico

Abaixo a lista alguns métodos mais comuns do package inspect:

  1. getmembers(object[, predicate])
  2. getmembers_static(object[, predicate])
  3. getmodulename(path)
  4. ismodule(object)
  5. ismethod(object)
  6. isgeneratorfunction(object)
  7. isgenerator(object)
  8. iscoroutinefunction(object)
  9. markcoroutinefunction(func)
  10. iscoroutine(object)
  11. isawaitable(object)
  12. isasyncgenfunction(object)
  13. isasyncgen(object)
  14. istraceback(object)
  15. isframe(object)
  16. iscode(object)
  17. ismethodwrapper(object)
  18. isroutine(object)
  19. ismethoddescriptor(object)
  20. isdatadescriptor(object)
  21. isgetsetdescriptor(object)
  22. ismemberdescriptor(object)
  1. 09/06/2025 - versão inicial