У Python есть декораторы в стандартной библиотеке?

Помимо @staticmethod и @classmethod? Большинство языков имеют некоторые базовые библиотеки, использующие большинство языковых функций.

Похоже, что многие из декораторов, которых я нахожу в себе, - это вещи, которые будут использовать тонны людей, но я не нашел встроенных декораторов питона, которые их делают. Есть ли такие вещи?

Ответы

Ответ 1

property обычно используется в качестве декоратора.

functools имеет несколько функций, обычно используемых в качестве декоратора, таких как total_ordering, update_wrapped, lru_cache и wraps.

contextlib имеет декоратор contextmanager.

Имейте в виду, что вы можете использовать любую функцию в качестве декоратора:

@decorator
def function(): pass

совпадает с

def function(): pass
function = decorator(function)

Чтобы быть полезными, они обычно должны ожидать, что они будут вызваны в качестве аргумента, и им нужно будет вернуть вызываемый объект. (property является исключением во второй части этого.)

Классы также могут быть оформлены точно так же.

Существует также список декораторов на Python Wiki. Некоторые из них находятся в стандартной библиотеке, некоторые - нет.

Ответ 4

Декораторы Python - это просто простые функции или другие вызывающие элементы, которые принимают в качестве одного аргумента функцию или класс, которые должны быть украшены. Таким образом, вы можете использовать многие обычные функции в качестве декораторов и наоборот. Возможное использование в качестве декоратора часто не задокументировано.