Skip to content
Tutoriels
Python
python __call__ Method: Everything You Need to Know

python call Method: Tout ce que vous devez savoir

Python est un langage passionnant, apprécié pour sa simplicité et ses puissantes capacités. Il offre plusieurs fonctions et méthodes intégrées, vous permettant d'écrire un code efficace et réutilisable. Mais aujourd'hui, nous allons nous concentrer sur une méthode spéciale qui n'est peut-être pas couramment connue de nombreux programmeurs Python : la méthode __call__.

La méthode __call__ en Python est un attribut unique des classes Python, faisant partie intégrante de la programmation orientée objet de Python. Découvrons ses objectifs, ses utilisations et ses avantages, et apprenons comment l'utiliser à travers des exemples pratiques.

Vous voulez créer rapidement une visualisation de données à partir d'un dataframe Python Pandas sans écrire de code ?

PyGWalker est une bibliothèque Python pour l'analyse exploratoire des données avec visualisation. PyGWalker (opens in a new tab) peut simplifier votre flux de travail d'analyse et de visualisation des données dans Jupyter Notebook, en transformant votre dataframe pandas (et le dataframe polars) en une interface utilisateur de style Tableau pour l'exploration visuelle.

PyGWalker pour la visualisation des données (opens in a new tab)

Qu'est-ce que la méthode call en Python ?

En programmation Python, les fonctions sont des objets de première classe. Cela signifie qu'elles peuvent être attribuées à des variables, stockées dans des structures de données, transmises en tant qu'arguments, voire renvoyées en valeurs par d'autres fonctions. Et si nous pouvions traiter les instances de classes de la même manière ? La méthode __call__ permet exactement cela.

La méthode __call__ est une méthode spéciale dans les classes Python, qui permet de rendre une instance de la classe appelable. Essentiellement, elle permet à une instance d'une classe d'être traitée et exécutée comme une fonction, améliorant ainsi la polyvalence de la programmation orientée objet de Python.

Considérons cet exemple simple :

classe Test:
    def __call__(auto, x):
        retourne x**2
 
T = Test()
print(T(5))  # affiche : 25

Ici, nous avons défini une classe Test avec une méthode __call__. Nous créons une instance T de la classe Test. Normalement, l'appel de T(5) lèverait une TypeError indiquant que l'objet 'Test' n'est pas appelable. Mais avec la méthode __call__ définie, elle renvoie le carré de l'argument, similaire à une fonction.

Comment utiliser la méthode call en Python ?

Pour utiliser la méthode __call__, il vous suffit de la définir dans votre classe. La méthode __call__ peut accepter n'importe quel nombre d'arguments, comme une fonction typique. Vous pouvez ainsi exploiter cette méthode pour faire en sorte que les instances de votre classe se comportent selon vos besoins.

Une utilisation courante de la méthode __call__ en Python est la création d'objets similaires à des fonctions qui conservent un état. Étant donné que chaque instance de la classe peut avoir son propre état unique, elle peut être utilisée pour conserver une sorte d'état entre les appels. Voici un exemple :

classe Compteur:
    def __init__(auto):
        auto.count = 0
    def __call__(auto):
        auto.count += 1
        retourne count
 
C = Compteur()
print(C())  # affiche : 1
print(C())  # affiche : 2

Dans la classe Compteur, la méthode __call__ incrémente une variable de compte à chaque fois que l'instance est appelée, créant ainsi un objet appelable avec état.

Appel en Python vs init

Maintenant, vous vous demandez peut-être - quelle est la différence entre __call__ et __init__ en Python ? Ne sont-ils pas tous les deux des méthodes dans les classes Python ?

Oui, ils le sont, mais ils ont des objectifs différents. La méthode __init__ est utilisée pour initialiser une instance d'une classe. C'est la méthode qui est appelée lorsque vous créez un nouvel objet, également appelé instance, d'une classe. D'autre part,

la méthode __call__ rend une instance appelable comme une fonction.

N'oubliez pas, __init__ est appelé une fois lors de la création de l'objet. __call__, quant à elle, peut être invoquée plusieurs fois chaque fois que l'instance est appelée.

Voici un exemple :

classe Test:
    def __init__(auto, valeur=0):
        print('méthode init appelée')
        auto.value = valeur
    def __call__(auto, x):
        print('méthode call appelée')
        retourne auto.value + x
 
T = Test(5)  # affiche : méthode init appelée
print(T(10))  # affiche : méthode call appelée, 15

Dans cet exemple, lorsque nous créons une instance T de Test, la méthode __init__ est invoquée et affiche 'méthode init appelée'. Lorsque nous appelons T(10), la méthode __call__ est invoquée et affiche 'méthode call appelée'.

La méthode call peut-elle être utilisée pour créer des instances appelables ?

Oui, en effet ! La méthode __call__ est spécialement conçue pour rendre les instances de classes appelables, similaires à des fonctions. C'est un excellent outil pour créer des objets qui ont besoin de conserver leur état entre plusieurs appels. Par exemple, vous pouvez l'utiliser pour suivre combien de fois une fonction est appelée ou pour mettre en cache des résultats qui peuvent être réutilisés.

Examinons un exemple de création d'une classe qui génère des nombres de Fibonacci, en utilisant la méthode __call__ pour conserver l'état entre les appels :

classe Fibonacci:
    def __init__(auto):
        auto.cache = {0: 0, 1: 1}
    def __call__(auto, n):
        if n not in auto.cache:
            auto.cache[n] = auto.__call__(n-1) + auto.__call__(n-2)
        retourne auto.cache[n]
 
F = Fibonacci()
print(F(10))  # affiche : 55

Quel est le but de la méthode call en Python?

En Python, la méthode __call__ permet d'utiliser des instances de classes comme si elles étaient des fonctions. Cela offre de la flexibilité, car cela permet aux classes d'avoir un comportement similaire à celui des fonctions, tout en conservant leur nature d'objets d'une classe. La méthode __call__ permet également aux instances de conserver un état entre les appels, ce qui peut être très utile dans différents scénarios de programmation.

La méthode __call__ n'est qu'une des nombreuses méthodes spéciales en Python qui contribuent à fournir la "magie" derrière la programmation orientée objet de Python. Comprendre et utiliser ces méthodes de manière appropriée peut grandement améliorer la flexibilité et l'efficacité de votre code Python.

Plongeons dans nos FAQ pour conclure ce guide sur __call__ en Python.

FAQ

1. Qu'est-ce que la méthode __call__ en Python?

La méthode __call__ est une méthode spéciale dans les classes Python. Elle permet d'appeler une instance d'une classe comme une fonction. Elle permet également à une instance de classe de conserver un état qui peut être modifié ou accédé à chaque fois que l'instance est appelée.

2. Quelle est la différence entre les méthodes __init__ et __call__ en Python?

La méthode __init__ est utilisée pour initialiser une instance d'une classe. Elle est automatiquement invoquée lorsqu'une instance de la classe est créée. La méthode __call__, en revanche, permet de rendre une instance appelable comme une fonction. Elle peut être invoquée plusieurs fois et permet à l'instance de conserver un état entre les appels.

3. La méthode __call__ peut-elle être utilisée pour créer des instances appelables?

Oui, la méthode __call__ peut être utilisée pour créer des instances appelables. Cela permet aux instances de classes de se comporter comme des fonctions et leur permet de conserver un état entre les appels, ce qui les rend utiles dans différents scénarios de programmation.

Conclusion

En résumé, la méthode __call__ est un outil puissant dans le langage de programmation Python, offrant un comportement flexible similaire à celui des fonctions aux instances de classe. Avec une compréhension et une utilisation appropriées de cette méthode, vous pouvez créer des programmes Python plus polyvalents et plus efficaces. Bonne programmation !