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 package inspect.
Nesta parte do tutorial vamos aprender a utilizar algumas funções básicas nativas e também
dos packages inspect e types.
type
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:
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
- 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.