Асинхронный декоратор с аргументами в классе

Как сделать асинхронный декоратор с аргументами? Декоратор должен принимать текст, ждать секунду, выполнять функцию func, и писать переданный текст. Это всё в классе.

import asyncio


class Foo:
    def bar(self, func, text):
        async def wrapper():
            await asyncio.sleep(1)
            await func()
            print(f'Переданный в декоратор текст: {text}')
        return wrapper
        


foo = Foo()
@foo.bar('Текст')
async def func():
    print('Функция выполнена')

asyncio.run(func())

Возникаемая ошибка:

Traceback (most recent call last):
  File "test.py", line 15, in <module>
    @foo.bar('Текст')

Ответы (1 шт):

Автор решения: mazzz3r

Вот это должно помочь:

import asyncio


class Foo:
    def with_args(self, text):
        def bar(func):
            async def wrapper():
                await asyncio.sleep(1)
                print(f'Переданный в декоратор текст: {text}')
                return await func()
            return wrapper
        return bar


foo = Foo()


@foo.with_args('Текст')
async def func():
    print('Функция выполнена')

asyncio.run(func())
→ Ссылка