Comment vérifier si un objet a une certaine méthode en Python

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à vérifier si un objet possède une certaine méthode en Python. Le laboratoire porte sur les méthodes d'objet, en mettant l'accent sur la manière dont elles encapsulent le comportement au sein des objets pour un code organisé et réutilisable.

Vous explorerez la classe Dog avec des méthodes telles que __init__, bark et get_name, en créant des instances et en appelant ces méthodes. Le laboratoire vous guidera ensuite dans l'utilisation de hasattr() et callable() pour déterminer si un objet possède une méthode spécifique. Enfin, vous comprendrez l'ordre de résolution des méthodes (Method Resolution Order - MRO).


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/ObjectOrientedProgrammingGroup -.-> python/constructor("Constructor") python/ObjectOrientedProgrammingGroup -.-> python/inheritance("Inheritance") subgraph Lab Skills python/function_definition -.-> lab-559612{{"Comment vérifier si un objet a une certaine méthode en Python"}} python/build_in_functions -.-> lab-559612{{"Comment vérifier si un objet a une certaine méthode en Python"}} python/classes_objects -.-> lab-559612{{"Comment vérifier si un objet a une certaine méthode en Python"}} python/constructor -.-> lab-559612{{"Comment vérifier si un objet a une certaine méthode en Python"}} python/inheritance -.-> lab-559612{{"Comment vérifier si un objet a une certaine méthode en Python"}} end

Apprendre les méthodes d'objet

Dans cette étape, vous allez apprendre les méthodes d'objet en Python. Les méthodes sont des fonctions associées aux objets. Elles servent à effectuer des opérations sur les données de l'objet. Comprendre les méthodes d'objet est essentiel pour travailler avec les objets et les classes en Python.

Commençons par créer une simple classe appelée Dog :

class Dog:
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed

    def bark(self):
        return "Woof!"

    def get_name(self):
        return self.name

Créez un fichier nommé dog.py dans votre répertoire ~/project en utilisant l'éditeur VS Code. Copiez et collez le code ci-dessus dans le fichier dog.py.

Cette classe a trois méthodes :

  • __init__ : C'est la méthode constructeur. Elle est appelée lorsqu'un nouvel objet de la classe est créé. Elle initialise les attributs de l'objet.
  • bark : Cette méthode retourne la chaîne de caractères "Woof!".
  • get_name : Cette méthode retourne le nom du chien.

Maintenant, créons un objet de la classe Dog et appelons ses méthodes. Créez un nouveau fichier nommé main.py dans le répertoire ~/project :

from dog import Dog

my_dog = Dog("Buddy", "Golden Retriever")

print(my_dog.bark())
print(my_dog.get_name())

Enregistrez le fichier main.py.

Pour exécuter le script main.py, ouvrez votre terminal et accédez au répertoire ~/project :

cd ~/project

Ensuite, exécutez le script en utilisant la commande python :

python main.py

Vous devriez voir la sortie suivante :

Woof!
Buddy

Dans cet exemple, my_dog est un objet de la classe Dog. Nous appelons les méthodes bark et get_name sur l'objet my_dog en utilisant la notation pointée (.).

Les méthodes d'objet vous permettent d'encapsuler le comportement au sein des objets, rendant votre code plus organisé et réutilisable. Elles font partie essentielle de la programmation orientée objet en Python.

Vérifier avec hasattr() et callable()

Dans cette étape, vous apprendrez à utiliser les fonctions hasattr() et callable() en Python. Ces fonctions sont utiles pour inspecter les objets et déterminer s'ils ont certains attributs ou méthodes.

  • hasattr(object, attribute_name) : Cette fonction vérifie si un objet a un attribut donné. Elle retourne True si l'attribut existe et False sinon.
  • callable(object) : Cette fonction vérifie si un objet est appelable (c'est-à-dire qu'il peut être appelé comme une fonction). Elle retourne True si l'objet est appelable et False sinon.

Continuons avec la classe Dog de l'étape précédente. Ouvrez le fichier dog.py dans votre répertoire ~/project en utilisant l'éditeur VS Code. Le contenu devrait être :

class Dog:
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed

    def bark(self):
        return "Woof!"

    def get_name(self):
        return self.name

Maintenant, créons un nouveau fichier nommé check_methods.py dans le répertoire ~/project pour démontrer l'utilisation de hasattr() et callable() :

from dog import Dog

my_dog = Dog("Buddy", "Golden Retriever")

print(hasattr(my_dog, "name"))
print(hasattr(my_dog, "bark"))
print(hasattr(my_dog, "age"))

print(callable(my_dog.bark))
print(callable(my_dog.name))

Enregistrez le fichier check_methods.py.

Dans cet exemple :

  • hasattr(my_dog, "name") vérifie si l'objet my_dog a un attribut nommé "name". Elle retournera True car la classe Dog a un attribut name.
  • hasattr(my_dog, "bark") vérifie si l'objet my_dog a un attribut nommé "bark". Elle retournera True car la classe Dog a une méthode bark.
  • hasattr(my_dog, "age") vérifie si l'objet my_dog a un attribut nommé "age". Elle retournera False car la classe Dog n'a pas d'attribut age.
  • callable(my_dog.bark) vérifie si l'attribut my_dog.bark est appelable (c'est-à-dire qu'il s'agit d'une méthode). Elle retournera True car bark est une méthode.
  • callable(my_dog.name) vérifie si l'attribut my_dog.name est appelable. Elle retournera False car name est un attribut de type chaîne de caractères, pas une méthode.

Pour exécuter le script check_methods.py, ouvrez votre terminal et accédez au répertoire ~/project :

cd ~/project

Ensuite, exécutez le script en utilisant la commande python :

python check_methods.py

Vous devriez voir la sortie suivante :

True
True
False
True
False

Ces fonctions sont utiles pour écrire un code plus robuste et flexible qui peut gérer différents types d'objets et d'attributs.

Comprendre l'ordre de résolution des méthodes (Method Resolution Order - MRO)

Dans cette étape, vous allez apprendre l'ordre de résolution des méthodes (Method Resolution Order - MRO) en Python. Le MRO est l'ordre dans lequel Python recherche une méthode dans une hiérarchie de classes. Il est particulièrement important lorsqu'il s'agit d'héritage multiple.

Créons un nouvel ensemble de classes pour illustrer le MRO. Créez un fichier nommé animal.py dans votre répertoire ~/project en utilisant l'éditeur VS Code :

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        return "Generic animal sound"


class Mammal(Animal):
    def speak(self):
        return "Generic mammal sound"


class Dog(Mammal):
    def speak(self):
        return "Woof!"


class Cat(Mammal):
    def speak(self):
        return "Meow!"

Enregistrez le fichier animal.py.

Maintenant, créons un nouveau fichier nommé mro_example.py dans le répertoire ~/project pour démontrer le MRO :

from animal import Animal, Mammal, Dog, Cat

my_dog = Dog("Buddy")
my_cat = Cat("Whiskers")

print(my_dog.speak())
print(my_cat.speak())

Enregistrez le fichier mro_example.py.

Dans cet exemple :

  • Animal est la classe de base avec une méthode speak.
  • Mammal hérite de Animal et remplace la méthode speak.
  • Dog hérite de Mammal et remplace la méthode speak.
  • Cat hérite de Mammal et remplace la méthode speak.

Lorsque vous appelez my_dog.speak(), Python cherche d'abord la méthode speak dans la classe Dog. S'il ne la trouve pas là, il la cherche dans la classe Mammal, puis dans la classe Animal. Cet ordre est déterminé par le MRO.

Pour exécuter le script mro_example.py, ouvrez votre terminal et accédez au répertoire ~/project :

cd ~/project

Ensuite, exécutez le script en utilisant la commande python :

python mro_example.py

Vous devriez voir la sortie suivante :

Woof!
Meow!

Maintenant, explorons un exemple plus complexe avec de l'héritage multiple. Créez un nouveau fichier nommé mro_complex.py dans le répertoire ~/project :

class A:
    def method(self):
        return "A"

class B(A):
    def method(self):
        return "B"

class C(A):
    def method(self):
        return "C"

class D(B, C):
    pass

d = D()
print(d.method())
print(D.mro())

Enregistrez le fichier mro_complex.py.

Dans cet exemple :

  • La classe D hérite à la fois de B et de C.
  • B et C héritent tous deux de A.
  • La méthode method est définie dans les trois classes A, B et C.

Pour exécuter le script mro_complex.py, ouvrez votre terminal et accédez au répertoire ~/project :

cd ~/project

Ensuite, exécutez le script en utilisant la commande python :

python mro_complex.py

Vous devriez voir la sortie suivante :

B
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]

La sortie B indique que la méthode method de la classe B est appelée. La méthode D.mro() retourne un tuple représentant l'ordre de résolution des méthodes pour la classe D. Dans ce cas, le MRO est D -> B -> C -> A -> object. Cela signifie que lorsque vous appelez d.method(), Python cherche d'abord la méthode dans la classe D, puis dans la classe B, puis dans la classe C, puis dans la classe A, et enfin dans la classe de base object.

Comprendre le MRO est essentiel pour prédire le comportement de votre code lorsqu'il utilise l'héritage, en particulier l'héritage multiple.

Résumé

Dans ce laboratoire (lab), la première étape consiste à comprendre les méthodes d'objet en Python. Elle introduit le concept de méthodes comme des fonctions associées aux objets, essentielles pour effectuer des opérations sur les données des objets. Une classe Dog est créée avec des méthodes telles que __init__, bark et get_name pour démontrer comment les méthodes encapsulent le comportement au sein des objets.

Le laboratoire vous guide ensuite dans la création d'une instance de la classe Dog et l'appel de ses méthodes à l'aide de la notation pointée, illustrant ainsi comment les méthodes d'objet contribuent à un code organisé et réutilisable en programmation orientée objet.