Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Chaînage de Décorateurs | Décorateurs
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Techniques Python Intermédiaires

bookChaînage de Décorateurs

Chaînage des décorateurs en Python est une fonctionnalité puissante qui vous permet d'appliquer plusieurs décorateurs à une seule fonction. Chaque décorateur modifie ou améliore la fonction d'une certaine manière, et ils sont appliqués dans un ordre spécifique. Voici un exemple pratique pour illustrer le chaînage des décorateurs :

Deux Décorateurs Simples

Tout d'abord, définissons deux décorateurs simples :

def decorator_one(func):
    def wrapper():
        print("Decorator one start")
        func()
        print("Decorator one end")
    return wrapper

def decorator_two(func):
    def wrapper():
        print("Decorator two start")
        func()
        print("Decorator two end")
    return wrapper

Chaînage des Décorateurs

Maintenant, appliquons ces décorateurs à une seule fonction :

1234567891011121314151617181920
def decorator_one(func): def wrapper(): print("Decorator one start") func() print("Decorator one end") return wrapper def decorator_two(func): def wrapper(): print("Decorator two start") func() print("Decorator two end") return wrapper @decorator_one @decorator_two def greet(): print("Hello!") greet()
copy

Dans chaque décorateur, il y a du code qui s'exécute avant de passer au décorateur suivant et après l'achèvement de ce décorateur. Cela fonctionne de manière superposée. Ils sont appliqués dans l'ordre où ils sont listés, de haut en bas. La sortie du décorateur supérieur devient l'entrée pour le suivant en bas. Cette superposition peut ajouter plusieurs fonctionnalités à la fonction originale.

Ordre d'exécution

Lorsque greet() est appelé, l'ordre d'exécution sera :

  1. Depuis decorator_one, le premier print est exécuté ;
  2. À l'intérieur de decorator_one, depuis decorator_two, le premier print est exécuté ;
  3. Enfin, la fonction greet originale est exécutée ;
  4. Ensuite, revenir en arrière et terminer l'exécution de decorator_two en imprimant le message ;
  5. Le code entier est terminé en exécutant la dernière instruction print dans decorator_one.

La sortie sera :

Decorator one start
Decorator two start
Hello!
Decorator two end
Decorator one end

Chaîner les décorateurs est un moyen puissant d'étendre le comportement des fonctions de manière modulaire et lisible.

J'espère que le prochain défi vous aidera à mieux comprendre ce sujet.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 5

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you explain why the decorators are applied in that specific order?

What happens if I switch the order of the decorators?

Can you show a real-world use case for chaining decorators?

bookChaînage de Décorateurs

Glissez pour afficher le menu

Chaînage des décorateurs en Python est une fonctionnalité puissante qui vous permet d'appliquer plusieurs décorateurs à une seule fonction. Chaque décorateur modifie ou améliore la fonction d'une certaine manière, et ils sont appliqués dans un ordre spécifique. Voici un exemple pratique pour illustrer le chaînage des décorateurs :

Deux Décorateurs Simples

Tout d'abord, définissons deux décorateurs simples :

def decorator_one(func):
    def wrapper():
        print("Decorator one start")
        func()
        print("Decorator one end")
    return wrapper

def decorator_two(func):
    def wrapper():
        print("Decorator two start")
        func()
        print("Decorator two end")
    return wrapper

Chaînage des Décorateurs

Maintenant, appliquons ces décorateurs à une seule fonction :

1234567891011121314151617181920
def decorator_one(func): def wrapper(): print("Decorator one start") func() print("Decorator one end") return wrapper def decorator_two(func): def wrapper(): print("Decorator two start") func() print("Decorator two end") return wrapper @decorator_one @decorator_two def greet(): print("Hello!") greet()
copy

Dans chaque décorateur, il y a du code qui s'exécute avant de passer au décorateur suivant et après l'achèvement de ce décorateur. Cela fonctionne de manière superposée. Ils sont appliqués dans l'ordre où ils sont listés, de haut en bas. La sortie du décorateur supérieur devient l'entrée pour le suivant en bas. Cette superposition peut ajouter plusieurs fonctionnalités à la fonction originale.

Ordre d'exécution

Lorsque greet() est appelé, l'ordre d'exécution sera :

  1. Depuis decorator_one, le premier print est exécuté ;
  2. À l'intérieur de decorator_one, depuis decorator_two, le premier print est exécuté ;
  3. Enfin, la fonction greet originale est exécutée ;
  4. Ensuite, revenir en arrière et terminer l'exécution de decorator_two en imprimant le message ;
  5. Le code entier est terminé en exécutant la dernière instruction print dans decorator_one.

La sortie sera :

Decorator one start
Decorator two start
Hello!
Decorator two end
Decorator one end

Chaîner les décorateurs est un moyen puissant d'étendre le comportement des fonctions de manière modulaire et lisible.

J'espère que le prochain défi vous aidera à mieux comprendre ce sujet.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 5
some-alt