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

Вступ до functool.wraps

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

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

Застосовуючи functools.wraps до функції-обгортки, зберігаються метадані оригінальної функції. Це означає:

  • Атрибут __name__ функції залишається таким самим, як у оригіналу;
  • Рядок __doc__ функції зберігається без змін;
  • Атрибут __module__ та інші метадані також зберігаються.

Збереження метаданих важливе для налагодження, генерації документації та інструментів, які використовують інспекцію функцій. Без functools.wraps трасування стеку та допоміжні утиліти можуть відображати заплутану або некоректну інформацію, що ускладнює підтримку та налагодження коду.

1234567891011121314151617181920212223
from functools import wraps # Define a decorator that will wrap another function def my_decorator(func): # Use @wraps to preserve metadata from the original function @wraps(func) def wrapper(*args, **kwargs): # This code runs before the original function print("Running the decorated function...") return func(*args, **kwargs) # Call the original function return wrapper # Return the wrapper as the new decorated function # Apply the decorator to a function def say_hello(): """Prints a hello message.""" print("Hello!") say_hello = my_decorator(say_hello) say_hello() # Print out the preserved metadata print(f"Function name: {say_hello.__name__}") # Name is preserved print(f"Docstring: {say_hello.__doc__}") # Docstring is preserved

Можна побачити, як використовувати functools.wraps для збереження метаданих оригінальної функції під час створення декоратора. Застосовуючи functools.wraps до обгортки, забезпечується збереження таких атрибутів, як ім'я функції та docstring, після декорування.

question mark

Чому важливо використовувати functools.wraps при написанні декораторів у Python?

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

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

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