⚡ Краткий справочник
@decorator — синтаксический сахар для func = decorator(func).
*args, **kwargs — универсальный способ принять любые аргументы.
@functools.wraps(func) — сохраняет __name__, __doc__ и другие атрибуты.
def factory(param): def decorator(func): ... return decorator — декоратор с параметрами.
class ClassName: — объявление класса.
def __init__(self, ...): — инициализация полей.
self.field — поле объекта.
object.method() — вызов метода.
Синтаксис декораторов
| Запись | Назначение | Пример |
@decorator | Применить декоратор к функции | @log def f(): ... |
*args | Позиционные аргументы произвольной длины | def wrapper(*args): ... |
**kwargs | Именованные аргументы произвольной длины | def wrapper(**kwargs): ... |
*args, **kwargs | Любые аргументы | def wrapper(*args, **kwargs): ... |
return func(*args, **kwargs) | Вызвать оригинал и вернуть результат | return func(*args, **kwargs) |
| Запись | Назначение | Пример |
@functools.wraps(func) | Сохраняет метаданные декорируемой функции | @functools.wraps(func) def wrapper(...): ... |
func.__name__ | Имя функции | 'add' |
func.__doc__ | Строка документации | 'Add two numbers.' |
Декоратор-фабрика
| Запись | Назначение | Пример |
def factory(param): | Принимает параметры декоратора | def retry(attempts): |
def decorator(func): | Возвращает декоратор | def decorator(func): |
def wrapper(...): | Оборачивает вызов | def wrapper(*args, **kwargs): |
return wrapper | Возвращает обёртку | внутри decorator |
return decorator | Возвращает сам декоратор | внутри factory |
Классы и объекты
| Запись | Назначение | Пример |
class ClassName: | Объявление класса | class Book: |
def __init__(self, ...): | Инициализатор объекта | def __init__(self, title): |
self.field = value | Создание поля объекта | self.title = title |
obj = ClassName(...) | Создание объекта | book = Book("1984") |
obj.field | Доступ к полю | book.title |
obj.method() | Вызов метода | book.show_info() |
Ключевые слова и атрибуты
| Элемент | Описание | Пример |
self | Первый параметр метода, ссылка на объект | def show(self): ... |
__init__ | Инициализатор | def __init__(self): |
__new__ | Конструктор объекта | вызывается автоматически |
__name__ | Имя функции/класса | func.__name__ |
__doc__ | Документация | func.__doc__ |
Правила использования
- Обёртка декоратора должна принимать и возвращать результат, если это нужно для прозрачности.
- Используйте
@functools.wraps, чтобы не терять метаданные.
- Декораторы применяются снизу вверх; порядок важен.
- Имена классов пишите в
CamelCase.
- Первый параметр метода —
self.
- Поля объекта создавайте через
self.field, иначе они не сохранятся.
- Для создания объекта обязательно вызывайте класс со скобками.