Django auth中间件的一些内部

max*_*axp 4 python django

在django.contrib.auth中间件中,我看到了代码:

class AuthenticationMiddleware(object):
    def process_request(self, request):
        assert hasattr(request, 'session'), "requires session middleware"
        request.__class__.user = LazyUser()
        return None
Run Code Online (Sandbox Code Playgroud)

请问为什么使用这样的表单request._ class _.user = LazyUser()?为什么不只是request.user = LazyUser()?

我知道_ class _属性意味着什么,但是因为我对实例变量的直接赋值会更好.哪里我错了?

Ale*_*lev 9

LazyUser是描述符类.根据文档,它可以只是类属性而不是实例一:

例如,a.x有一个查找链,从a.__dict__['x'],然后type(a).__dict__['x'],继续通过type(a)排除元类的基类开始.