Leitura recomendada
        
    
    
    
        
Objetivos
        
    
    
        
            Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.
            
         
     
    
        
Reflection
    
    
        
            
                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 o package inspect.
            
            
                Nesta parte do tutorial vamos aprender a utilizar algumas funções básicas nativas e também 
                dos packages inspect e types.
            
         
     
    
        
Função type
    
    
        
            
                Para recuperar o tipo de dado de um objeto ou variáveo, 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 6
            
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 podemos 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:
            
            
                getmembers(object[, predicate]) 
                getmembers_static(object[, predicate]) 
                getmodulename(path) 
                ismodule(object) 
                ismethod(object) 
                isgeneratorfunction(object) 
                isgenerator(object) 
                iscoroutinefunction(object) 
                markcoroutinefunction(func) 
                iscoroutine(object) 
                isawaitable(object) 
                isasyncgenfunction(object) 
                isasyncgen(object) 
                istraceback(object) 
                isframe(object) 
                iscode(object) 
                ismethodwrapper(object) 
                isroutine(object) 
                ismethoddescriptor(object) 
                isdatadescriptor(object) 
                isgetsetdescriptor(object) 
                ismemberdescriptor(object) 
            
         
     
    
        Histórico de atualizações
        
     
    
        
            
                - 12/09/2025 - revisão 1 - Ajustes: pontuais, sintaxes e objetivos'
 
                - 09/06/2025 - versão inicial
 
            
         
     
    
            
            
                
                    
                    Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
                em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.