Исполнение корутины в конструкторе класса

У меня есть класс, в котором мне после его инициализации необходимо произвести авторизацию на сайте, чтобы использовать другие методы. При этом я не хочу, чтобы пользователь использовал дополнительные методы типа auth(), init() и т.д.

Я хочу сделать по аналогии с redis-py, там же не происходит никакой авторизации через какой-то метод типа auth(). Примерно таким образом осуществляется работа с Redis:

import redis.asyncio as redis

client = redis.Redis()
print(f"Ping successful: {await client.ping()}")
await client.aclose()

Никаких допольнительных методов для авторизации мы не видим. И, как мы знаем, использовать корутины в конструкторе __init__() нельзя.

Отсюда вопрос, как можно обойти такое? Лично я делал метод в классе, который каждый раз использовался в методе примерно так:

    async def get_marks(self) -> dict[str, list[Mark]]:
    await self.__execute_auth()
    return await Marks(self._http_page).get_marks()

async def get_schedule(self):
    pass

async def get_session_data(self) -> User | None:
    await self.__execute_auth()
    return self._login_service.session_data

Через __execute_auth() я проводил проверку, выполнена ли авторизация, если нет, то авторизовываемся, если да, то возвращаем None.


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