Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Ланцюжкове та стекове використання декораторів | Опанування декораторами Python
Середній Рівень Python

Ланцюжкове та стекове використання декораторів

Свайпніть щоб показати меню

Під час роботи з декораторами у Python часто виникає потреба застосувати більше одного декоратора до однієї функції. Це називається стекуванням або ланцюжком декораторів. Для стекування декораторів потрібно розмістити кілька рядків декораторів один за одним безпосередньо над визначенням функції. Порядок, у якому ви стекуєте декоратори, має значення, оскільки він впливає на те, як функція обгортається і як кожен декоратор взаємодіє з іншими. Декоратор, який знаходиться найближче до функції, застосовується першим, а кожен наступний декоратор обгортає результат попереднього. Це означає, що декоратор у верхній частині стека є найзовнішнім обгортанням, а той, що найближче до функції, — найвнутрішнім.

У наведеному нижче прикладі визначено два декоратора: decorator_one та decorator_two, які стекуються над функцією greet. Порядок стекування визначає, як саме застосовуються декоратори.

123456789101112131415161718192021222324252627
# Prints messages before and after the function call def decorator_one(func): def wrapper(*args, **kwargs): print("Decorator One: Before") result = func(*args, **kwargs) print("Decorator One: After") return result return wrapper # Also prints messages before and after the function call def decorator_two(func): def wrapper(*args, **kwargs): print("Decorator Two: Before") result = func(*args, **kwargs) print("Decorator Two: After") return result return wrapper # Stacking decorators # decorator_two is applied first (innermost), # then decorator_one wraps the result (outermost) @decorator_one @decorator_two def greet(name): print(f"Hello, {name}!") greet("Alice")
Note
Примітка

Зверніть увагу, що спочатку до decorator_two застосовується greet, а потім результат обгортається decorator_one. Це означає, що декоратор, який знаходиться найближче до функції, є найвнутрішнішим, а найверхніший — найзовнішнішим. Порядок накладання декораторів важливий, оскільки він впливає на поведінку декорованої функції.

question mark

У якому порядку застосовуються складені декоратори в Python?

Виберіть усі правильні відповіді

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 5

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 4. Розділ 5
some-alt