关于_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_方法的一些理解的更多相关文章
- rt-thread中动态内存分配之小内存管理模块方法的一点理解
@2019-01-18 [小记] rt-thread中动态内存分配之小内存管理模块方法的一点理解 > 内存初始化后的布局示意 lfree指向内存空闲区首地址 /** * @ingroup Sys ...
- 对Object类中方法的深入理解
看一下API中关于Object的介绍: 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 那么Object中到底有哪些方法,各自有什 ...
- 关于JS中apply方法的基本理解
最近研究OpenLayers源码时,发现其中使用了比较多的apply方法,对其也是很不明白.于是上网经过多方面了解以及自己细细体会后,终于算是基本明白是其干什么的了,这里分享下.apply方法的造型是 ...
- java方法的多态性理解
1.什么是java的多态 浏览了别人博客中的一些介绍多态的文章,发现大家的描述有点不一样,主要区别在于是否把方法的重写算做多态.一种我比较认同的说法如下: 多态分为两种 a. 编译时多态:方法的重载: ...
- 关于hasnextLine()方法的一些理解
以前对于hasnextline的理解就是 :判断是否有下一个值 今天发现了个特例,它竟然是个阻塞式的方法 看下面一个案例 这是服务器 package Service; import java.io.I ...
- [LNU.Machine Learning.Question.1]梯度下降方法的一些理解
曾经学习machine learning,在regression这一节,对求解最优化问题的梯度下降方法,理解总是处于字面意义上的生吞活剥. 对梯度的概念感觉费解?到底是标量还是矢量?为什么沿着负梯度方 ...
- convertView&setTag方法的一点理解
前言 首先我们要知道setTag方法是干什么的,SDK解释为 Tags Unlike IDs, tags are not used to identify views. Tags are essent ...
- 对call() apply() 方法的简单理解
真的是非常简单的理解,我知道的并不多,在网上查找了很多的资料,还是只能了解一点皮毛,下面来整理出来,方便以后深入的去学习,也是对目前知道的知识点的巩固. 整理一些网上的经典解答: 1.一句话区分cal ...
- C#Contains方法的错误理解
一,我们先看看代码: string aa = "1,2,3,44"; "; "); "); Console.WriteLine("a输出&q ...
随机推荐
- 四、bootstrap-Table
一.bootstrap-Table基础表格 <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- linux随笔-05
shell脚本&定时任务 编写Shell脚本 可以将Shell终端解释器当作人与计算机硬件之间的“翻译官”. Shell脚本命令的工作方式有两种:交互式和批处理. 交互式(Interactiv ...
- cookieUtils.js
cookieUtils.js export default { data () { return { } }, created () { }, methods: { arrayContain (arr ...
- MariaDB 管理
在尝试运行MariaDB之前,首先确定其当前状态,运行或关闭. 有三个选项用于启动和停止MariaDB - 运行mysqld(MariaDB脚本). 运行mysqld_safe启动脚本. 运行mysq ...
- centos7 rm -rf 删除文件的找回
今天手贱一不小心把我正个项目目录删除了,没办法只能找回啦 文件系统是ext4的,只能使用extundelete df -hT 文件名 查看 下删除的文件夹所在的硬盘 1. 安装依赖 ...
- 未来-YLB-跳蚤市场:跳蚤市场(flea market)
ylbtech-未来-YLB-跳蚤市场:跳蚤市场(flea market) 跳蚤市场(flea market)是欧美等西方国家对旧货地摊市场的别称.由一个个地摊摊位组成,市场规模大小不等. 出售商品多 ...
- WebBrowser是IE内置的浏览器控件
WebBrowser是IE内置的浏览器控件.WebBrowser是IE内置的浏览器控件.WebBrowser是IE内置的浏览器控件.重要的事情说三遍,原因是一开始使用的时候就在这踩了坑. WebBro ...
- Hexo next博客的pjax一个Bug引发的关于pjax用法的小技巧-----pjax后图片点击放大的js失效
文章目录 广告: 背景 发现 解决 get技能 广告: 本人博客地址:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.git ...
- Jeecg_Jflow整合记录
系统组织机构 t_s_deparselect * from t_s_departselect * from t_s_depart where id='402888fd6a8c24e9016a8c531 ...
- JasperReports教程
JasperReports教程 Jasper报表是一个开源的Java报表引擎,是基于Java的,它没有自己的表达式语法. 由于JasperReports是一个Java类库,而不是针对最终用户,而是有针 ...