request.__class__.user = LazyUser()
Это потому, что вы можете использовать зарегистрированный пользовательский экземпляр в своих представлениях и шаблонах, и лучшим местом для хранения этих данных является запрос ...
С другой стороны, _cached_user является внутренней функцией django, это означает, что эта функция используется внутри django и должна быть доступна для любого, кто использует django. Поэтому логично не добавлять это как класс attirbute ... Как сказали разработчики django, атрибуты, начинающиеся с '_', не должны использоваться, поскольку они написаны для использования внутри django, а не для любого приложения, написанного на django.
Кроме того, _cached_user проверяет запрос, и в некоторых случаях данные запроса вошедшего в систему пользователя могут не содержать эту информацию (например, из-за кэша браузера) LazyUser гарантирует возвращать экземпляр пользователя вошедшего в систему пользователя при каждом условии.
И Django предполагает, что аутентифицированный пользователь, связанный с запросом, не изменится во время обработки каждого веб-запроса.