Trouver les méthodes d'un objet Python de 6 manières

Sidrah Abdullah 10 octobre 2023
  1. Trouver les méthodes d’un objet Python à l’aide de la méthode dir
  2. Trouver le type d’objet Python à l’aide de la fonction type
  3. Trouver l’identifiant d’un objet Python à l’aide de la fonction id
  4. Trouver les méthodes d’un objet Python à l’aide du module inspect
  5. Trouver des objets Python à l’aide de la méthode hasattr()
  6. Rechercher des objets à l’aide de la méthode getattr()
Trouver les méthodes d'un objet Python de 6 manières

Dans la programmation Python, la capacité à trouver des méthodes d’un objet Python de manière dynamique est appelée introspection. Puisque tout en Python est un objet, nous pouvons facilement découvrir ses objets au moment de l’exécution.

Nous pouvons examiner ceux qui utilisent les fonctions et modules intégrés. C’est particulièrement utile lorsque l’on veut connaître les informations sans lire le code source.e

Cet article couvre les six moyens simples que nous pouvons utiliser pour trouver les méthodes d’un objet Python. Plongeons-y.

Trouver les méthodes d’un objet Python à l’aide de la méthode dir

La première méthode pour trouver les méthodes est d’utiliser la fonction dir(). Cette fonction prend un objet comme argument et renvoie une liste d’attributs et de méthodes de cet objet.

La syntaxe de cette fonction est :

# python 3.x
dir(object)

Par exemple:

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

Production :

['__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']

À partir de la sortie, nous pouvons observer qu’il a renvoyé toutes les méthodes de l’objet.

Les fonctions commençant par un double trait de soulignement sont appelées méthodes dunder. Ces méthodes sont appelées objets wrapper. Par exemple, la fonction dict() appellerait la méthode __dict__().

Nous avons créé cette classe de base de véhicule 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

Si nous créons un objet de cette classe et exécutons la fonction dir(), nous pouvons voir la sortie suivante :

# 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']

On peut voir qu’il liste toutes les méthodes ainsi que leurs attributs. Il montre les méthodes que nous avons créées, mais il répertorie également toutes les méthodes intégrées de cette classe.

De plus, nous pouvons également vérifier si la méthode est appelable en utilisant la fonction callable() et en passant l’objet en argument.

Trouver le type d’objet Python à l’aide de la fonction type

La deuxième méthode consiste à utiliser la fonction type(). La fonction type() permet de retourner le type d’un objet.

On peut passer n’importe quel objet ou valeur dans l’argument de la fonction type(). Par exemple:

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

Cela affichera la sortie suivante :

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

La fonction type() a renvoyé le type d’un objet.

Trouver l’identifiant d’un objet Python à l’aide de la fonction id

Pour connaître l’identifiant d’un objet en Python, nous allons utiliser la fonction id().

Cette fonction renvoie un identifiant spécial de tout objet passé en argument. L’identifiant est similaire à un emplacement spécial dans la mémoire pour cet objet particulier.

Par exemple:

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

Nous obtiendrons une sortie similaire après avoir exécuté ces commandes :

140234778692576
94174513879552
140234742627312

Trouver les méthodes d’un objet Python à l’aide du module inspect

Le module inspect est une autre méthode que nous pouvons utiliser pour afficher des informations sur les objets Python en direct. La syntaxe de ce module est :

# python 3.x
import inspect

print(inspect.getmembers(object))

La première étape consiste à importer le module inspect. Après cela, nous appellerons la fonction getmembers() du module inspect et passerons l’objet en argument.

Par exemple:

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

Dans l’exemple ci-dessus, nous avons inspecté deux objets : une liste et l’objet de la classe Véhicule. Après avoir exécuté le code, nous obtenons cette sortie :

# 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)]

Trouver des objets Python à l’aide de la méthode hasattr()

Enfin, on peut aussi utiliser la méthode hasattr() pour connaître les méthodes d’un objet Python. Cette fonction vérifie si un objet a un attribut.

La syntaxe de cette méthode est :

# python 3.x
hasattr(object, attribute)

La fonction prend deux arguments : objet et attribut. Il vérifie si l’attribut est présent dans cet objet particulier.

Par exemple:

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

Cette fonction renverra True si l’attribut existe. Sinon, il renverra False. De plus, une fois la méthode trouvée, nous pouvons utiliser la fonction help() pour visualiser sa documentation.

Par exemple:

# python 3.x
help(object.method)

Rechercher des objets à l’aide de la méthode getattr()

Contrairement à la méthode hasattr(), la méthode getattr() renvoie le contenu d’un attribut s’il existe pour cet objet Python particulier.

La syntaxe de cette fonction est :

# python 3.x
getattr(object, attribute)

Par exemple:

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

Production :

Built-in mutable sequence.

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

D’après la sortie, il est clair que l’attribut existe. Par conséquent, il a renvoyé son contenu avec des détails sur le fonctionnement de cette méthode.

Jusqu’à présent, nous avons examiné plusieurs méthodes pour effectuer l’introspection d’objets. En d’autres termes, nous avons répertorié les méthodes et les attributs d’un objet Python de 5 manières différentes.

En suivant cet article, nous devrions être en mesure d’évaluer les objets Python et d’effectuer une introspection.

Si ce guide vous a aidé, merci de le partager.

Article connexe - Python Object