Исполнение корутины в конструкторе класса
У меня есть класс, в котором мне после его инициализации необходимо произвести авторизацию на сайте, чтобы использовать другие методы. При этом я не хочу, чтобы пользователь использовал дополнительные методы типа 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
.