理解_getattr_方法
Posted shenjianping
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解_getattr_方法相关的知识,希望对你有一定的参考价值。
在学习rest framework的过程中,rest framework的request是经过重构的,但是如果调用重构对象request中的属性,如果属性不存在会调用原request对象中的属性,它使用的就是__getattr__方法。
class Request(object): """ Wrapper allowing to enhance a standard `HttpRequest` instance. Kwargs: - request(HttpRequest). The original request instance. - parsers_classes(list/tuple). The parsers to use for parsing the request content. - authentication_classes(list/tuple). The authentications used to try authenticating the request‘s user. """ ... def __getattr__(self, attr): """ If an attribute does not exist on this instance, then we also attempt to proxy it to the underlying HttpRequest object. """ try: return getattr(self._request, attr) except AttributeError: return self.__getattribute__(attr) ...
在新构建的Request中存在__getattr__,假如调用request.GET,新构建的request中如果没有GET属性的话,就会调用__getattr__方法,并且将GET传递给__getattr__方法,此时返回的就是:
getattr(self._request, GET)
总结:
- _getattr__可以动态返回一个属性;
- 当调用一个对象不存在的属性时,Python会试图调用该对象__getattr__(self,attr)方法
以上是关于理解_getattr_方法的主要内容,如果未能解决你的问题,请参考以下文章
Python的__getattr__和__getattribute__
python中__getattr__和__getattribute__区别