Encontrar métodos de um objeto Python de 6 maneiras

Sidrah Abdullah 10 outubro 2023
  1. Encontre métodos de um objeto Python usando o método dir
  2. Encontre o tipo de objeto Python usando a função type
  3. Encontre o Id do objeto Python usando a função id
  4. Encontre métodos de um objeto Python usando o módulo inspect
  5. Encontre objetos Python usando o método hasattr()
  6. Encontre objetos usando o método getattr()
Encontrar métodos de um objeto Python de 6 maneiras

Na programação Python, a capacidade de encontrar métodos de um objeto Python dinamicamente é chamada de introspecção. Como tudo em Python é um objeto, podemos descobrir facilmente seus objetos em tempo de execução.

Podemos examiná-los usando as funções e módulos integrados. É especialmente útil quando queremos saber as informações sem ler o código-fonte.

Este artigo cobre as seis maneiras fáceis que podemos usar para encontrar os métodos de um objeto Python. Vamos mergulhar nisso.

Encontre métodos de um objeto Python usando o método dir

O primeiro método para encontrar os métodos é usar a função dir(). Esta função recebe um objeto como argumento e retorna uma lista de atributos e métodos desse objeto.

A sintaxe para esta função é:

# python 3.x
dir(object)

Por exemplo:

# python 3.x
my_object = ["a", "b", "c"]
dir(my_object)

Resultado:

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

A partir da saída, podemos observar que ele retornou todos os métodos do objeto.

As funções que começam com um sublinhado duplo são chamadas de métodos dunder. Esses métodos são chamados de objetos de invólucro. Por exemplo, a função dict() chamaria o método __dict__().

Criamos esta classe básica Vehicle Python:

# python 3.x
class Vehicle:
    def __init__(self, wheels=4, colour="red"):
        self.wheels = wheels
        self.colour = colour

    def repaint(self, colour=None):
        self.colour = colour

Se fizermos um objeto desta classe e executarmos a função dir(), podemos ver a seguinte Resultado:

# python 3.x
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'colour', 'repaint', 'wheels']

Podemos ver que ele lista todos os métodos, bem como seus atributos. Mostra os métodos que criamos, mas também lista todos os métodos internos desta classe.

Além disso, também podemos verificar se o método pode ser chamado usando a função callable() e passando o objeto como um argumento.

Encontre o tipo de objeto Python usando a função type

O segundo método é usar a função type(). A função type() é usada para retornar o tipo de um objeto.

Podemos passar qualquer objeto ou valor no argumento da função type(). Por exemplo:

# python 3.x
print(type(my_object))
print(type(1))
print(type("hello"))

Isso exibirá a seguinte Resultado:

<class 'list'> 
<class 'int'> 
<class 'str'>

A função type() retornou o tipo de um objeto.

Encontre o Id do objeto Python usando a função id

Para descobrir a id de um objeto em Python, usaremos a função id().

Esta função retorna um id especial de qualquer objeto que é passado como um argumento. O id é semelhante a um lugar especial na memória para esse objeto específico.

Por exemplo:

# python 3.x
print(id(my_object))
print(id(1))
print(id("Hello"))

Obteremos uma saída semelhante após executar estes comandos:

140234778692576
94174513879552
140234742627312

Encontre métodos de um objeto Python usando o módulo inspect

O módulo inspect é outro método que podemos usar para ver informações sobre objetos Python ativos. A sintaxe para este módulo é:

# python 3.x
import inspect

print(inspect.getmembers(object))

O primeiro passo é importar o módulo inspect. Depois disso, vamos chamar a função getmembers() do módulo inspect e passar o objeto como um argumento.

Por exemplo:

# python 3.x
print(inspect.getmembers(my_object))
print(inspect.getmembers(Vehicle))

No exemplo acima, inspecionamos dois objetos: uma lista e o objeto da classe Vehicle. Depois de executar o código, obtemos esta Resultado:

# python 3.x
[('__add__', <method-wrapper '__add__' of list object at 0x7f8af42b4be0>), ('__class__', <class 'list'>), ('__contains__', <method-wrapper '__contains__' of list object at 0x7f8af42b4be0>), ('__delattr__', <method-wrapper '__delattr__' of list object at 0x7f8af42b4be0>), ('__delitem__', <method-wrapper '__delitem__' of list object at 0x7f8af42b4be0>), ('__dir__', <built-in method __dir__ of list object at 0x7f8af42b4be0>), ('__doc__', 'Built-in mutable sequence.\n\nIf no argument is given, the constructor creates a new empty list.\nThe argument must be an iterable if specified.'), ('__eq__', <method-wrapper '__eq__' of list object at 0x7f8af42b4be0>), ('__format__', <built-in method __format__ of list object at 0x7f8af42b4be0>), ('__ge__', <method-wrapper '__ge__' of list object at 0x7f8af42b4be0>), ('__getattribute__', <method-wrapper '__getattribute__' of list object at 0x7f8af42b4be0>), ('__getitem__', <built-in method __getitem__ of list object at 0x7f8af42b4be0>), ('__gt__', <method-wrapper '__gt__' of list object at 0x7f8af42b4be0>), ('__hash__', None), ('__iadd__', <method-wrapper '__iadd__' of list object at 0x7f8af42b4be0>), ('__imul__', <method-wrapper '__imul__' of list object at 0x7f8af42b4be0>), ('__init__', <method-wrapper '__init__' of list object at 0x7f8af42b4be0>), ('__init_subclass__', <built-in method __init_subclass__ of type object at 0x55a6b668d5a0>), ('__iter__', <method-wrapper '__iter__' of list object at 0x7f8af42b4be0>), ('__le__', <method-wrapper '__le__' of list object at 0x7f8af42b4be0>), ('__len__', <method-wrapper '__len__' of list object at 0x7f8af42b4be0>), ('__lt__', <method-wrapper '__lt__' of list object at 0x7f8af42b4be0>), ('__mul__', <method-wrapper '__mul__' of list object at 0x7f8af42b4be0>), ('__ne__', <method-wrapper '__ne__' of list object at 0x7f8af42b4be0>), ('__new__', <built-in method __new__ of type object at 0x55a6b668d5a0>), ('__reduce__', <built-in method __reduce__ of list object at 0x7f8af42b4be0>), ('__reduce_ex__', <built-in method __reduce_ex__ of list object at 0x7f8af42b4be0>), ('__repr__', <method-wrapper '__repr__' of list object at 0x7f8af42b4be0>), ('__reversed__', <built-in method __reversed__ of list object at 0x7f8af42b4be0>), ('__rmul__', <method-wrapper '__rmul__' of list object at 0x7f8af42b4be0>), ('__setattr__', <method-wrapper '__setattr__' of list object at 0x7f8af42b4be0>), ('__setitem__', <method-wrapper '__setitem__' of list object at 0x7f8af42b4be0>), ('__sizeof__', <built-in method __sizeof__ of list object at 0x7f8af42b4be0>), ('__str__', <method-wrapper '__str__' of list object at 0x7f8af42b4be0>), ('__subclasshook__', <built-in method __subclasshook__ of type object at 0x55a6b668d5a0>), ('append', <built-in method append of list object at 0x7f8af42b4be0>), ('clear', <built-in method clear of list object at 0x7f8af42b4be0>), ('copy', <built-in method copy of list object at 0x7f8af42b4be0>), ('count', <built-in method count of list object at 0x7f8af42b4be0>), ('extend', <built-in method extend of list object at 0x7f8af42b4be0>), ('index', <built-in method index of list object at 0x7f8af42b4be0>), ('insert', <built-in method insert of list object at 0x7f8af42b4be0>), ('pop', <built-in method pop of list object at 0x7f8af42b4be0>), ('remove', <built-in method remove of list object at 0x7f8af42b4be0>), ('reverse', <built-in method reverse of list object at 0x7f8af42b4be0>), ('sort', <built-in method sort of list object at 0x7f8af42b4be0>)] [('__class__', <class '__main__.Vehicle'>), ('__delattr__', <method-wrapper '__delattr__' of Vehicle object at 0x7f8af813a350>), ('__dict__', {'wheels': 4, 'colour': 'red'}), ('__dir__', <built-in method __dir__ of Vehicle object at 0x7f8af813a350>), ('__doc__', None), ('__eq__', <method-wrapper '__eq__' of Vehicle object at 0x7f8af813a350>), ('__format__', <built-in method __format__ of Vehicle object at 0x7f8af813a350>), ('__ge__', <method-wrapper '__ge__' of Vehicle object at 0x7f8af813a350>), ('__getattribute__', <method-wrapper '__getattribute__' of Vehicle object at 0x7f8af813a350>), ('__gt__', <method-wrapper '__gt__' of Vehicle object at 0x7f8af813a350>), ('__hash__', <method-wrapper '__hash__' of Vehicle object at 0x7f8af813a350>), ('__init__', <bound method Vehicle.__init__ of <__main__.Vehicle object at 0x7f8af813a350>>), ('__init_subclass__', <built-in method __init_subclass__ of type object at 0x55a6b9617e20>), ('__le__', <method-wrapper '__le__' of Vehicle object at 0x7f8af813a350>), ('__lt__', <method-wrapper '__lt__' of Vehicle object at 0x7f8af813a350>), ('__module__', '__main__'), ('__ne__', <method-wrapper '__ne__' of Vehicle object at 0x7f8af813a350>), ('__new__', <built-in method __new__ of type object at 0x55a6b6698ba0>), ('__reduce__', <built-in method __reduce__ of Vehicle object at 0x7f8af813a350>), ('__reduce_ex__', <built-in method __reduce_ex__ of Vehicle object at 0x7f8af813a350>), ('__repr__', <method-wrapper '__repr__' of Vehicle object at 0x7f8af813a350>), ('__setattr__', <method-wrapper '__setattr__' of Vehicle object at 0x7f8af813a350>), ('__sizeof__', <built-in method __sizeof__ of Vehicle object at 0x7f8af813a350>), ('__str__', <method-wrapper '__str__' of Vehicle object at 0x7f8af813a350>), ('__subclasshook__', <built-in method __subclasshook__ of type object at 0x55a6b9617e20>), ('__weakref__', None), ('colour', 'red'), ('repaint', <bound method Vehicle.repaint of <__main__.Vehicle object at 0x7f8af813a350>>), ('wheels', 4)]

Encontre objetos Python usando o método hasattr()

Por último, também podemos usar o método hasattr() para descobrir os métodos de um objeto Python. Esta função verifica se um objeto possui um atributo.

A sintaxe para este método é:

# python 3.x
hasattr(object, attribute)

A função leva dois argumentos: objeto e atributo. Ele verifica se o atributo está presente naquele objeto específico.

Por exemplo:

# python 3.x
print(hasattr(my_object, "__doc__"))

Esta função retornará True se o atributo existir. Caso contrário, ele retornará False. Além disso, uma vez encontrado o método, podemos usar a função help() para ver sua documentação.

Por exemplo:

# python 3.x
help(object.method)

Encontre objetos usando o método getattr()

Em contraste com o método hasattr(), o método getattr() retorna o conteúdo de um atributo se ele existir para aquele objeto Python específico.

A sintaxe para esta função é:

# python 3.x
getattr(object, attribute)

Por exemplo:

# python 3.x
print(getattr(my_object, "__doc__"))

Resultado:

Built-in mutable sequence.

If no argument is given, the constructor creates a new empty list.
The argument must be an iterable if specified.

A partir da saída, fica claro que o atributo existe. Portanto, ele retornou seu conteúdo com detalhes sobre como esse método funciona.

Até agora, vimos vários métodos para realizar a introspecção de objetos. Em outras palavras, listamos os métodos e atributos de um objeto Python de 5 maneiras diferentes.

Seguindo este artigo, devemos ser capazes de avaliar objetos Python e realizar introspecção.

Se este guia ajudou você, por favor, compartilhe.

Artigo relacionado - Python Object