django rest framework学习准备,面向对象中类的使用。
先甩个题:
class B(object):
def __init__(self,name.age):
self.name=name
self.age = age
self.foo()
def foo() :
print("B foo")
class A(B):
name = 'xxxxx'
def foo():
print("A foo")
X = A('GWJ','23')
输出X会得到什么。
之前学习的django都基于fbv的开发模式,既视图函数基于方法的开发。
然而这并不能体现python面向对象的优点,所以引入了cbv的开发模式,既视图函数基于类的开发。在fbv开发中,无法基于路由判断请求方法是get还是post,在cbv中可以声明,既:
可以定义两个方法分别对应两种请求。类LoginView继承父类View,drf的开发是完全面向对象的,所以在开始学习前不得不重新熟悉一下python中类的使用。首先是实例化对象,例:
定义一个动物类,写入初始化方法。在外部拿一个A去接收,传入规定的两个参数name和age,这就是一个实例化的过程。我们去深究他的原理,其实类是会单独开辟一个存储空间的,叫做类空间,其中会包含类的属性,类的方法等等。我们实例化的过程实际就是在开辟一个实例空间,如图,类空间其实是实例空间的创建环境,当实例空间找不到一个变量的时候(既上文中的name age)就会去类空间里面找,如果类空间里面也没有,此时就会去类空间的父类对象里面去找,如果父类里面也没有的话程序这个时候就该报错了。
很多人以为类在实例化的时候是初始化方法先被执行既__init__,其实在初始化方法之前还有一个__new__方法,而这个方法的作用实际上就是帮助我们开辟实例空间的,name,age等变量都存储在这里。new魔术方法是开辟了一个内存空间之后,将这个内存空间作为返回值附给了init方法的self。此时self其实就相当于这块开辟出来的实例空间了,后面的操作无非就是对里面的属性进行赋值。
我们拿出来接收的A,A = Animal("daishu",'22')此时A就指向这块实例化的空间的地址,A.name或者A.age的时候就会去这块实例化空间找,如果在实例化的空间找不到,就会去他的上一级,既类空间去找。
所以类属性是适用于类中所有方法的,因为类中的方法在自己的实例化空间找不到变量的时候都会去公共的类空间寻找。举个有趣的例子:在类空间里面定义了一个number=1,此时
A = Animal("daishu",'22')
B = Animal("GWJ",'24')
如果我定义B.number=2,这个时候A.number也不会有任何变化还是等于1,因为这是写在类空间的公用属性。那如果我非要改这个类空间里面的属性怎么办呢,那就将眼光放到类对象上,直接Animal.number=2就可以对类属性进行更改了。
还有一个点,既我在类中加上这么一个函数,然后实例化这个类,我能不能调用name这个函数
A.name()答案是不行的,因为name是class这个类的方法,如果写下A.name(),python解释器会先执行A.name,既name这个变量,然后返回一个字符串后面再接一个括号就报错了,因为py中只有函数和类才是可callable的。如果想使用name方法只能Animal.name('xxxx')
现在再来看上面那道题就清晰多了,首先实例化A类,没有init方法,就去他的父类B类中寻找,将name和age传入B类的init方法后,还会执行一个foo方法,那么问题来了,是执行B类中的foo方法还是执行A类中的foo方法呢。根据上面的知识点,x会现在自己的实例化对象中找,如果自己的实例化对象中没有才会去父类中找,所以这个时候会执行A类中的foo方法,既输出A foo。
django rest framework学习准备,面向对象中类的使用。相关推荐
- 源码剖析Django REST framework的认证方式及自定义认证
源码剖析Django REST framework的认证方式 由Django的CBV模式流程,可以知道在url匹配完成后,会执行自定义的类中的as_view方法. 如果自定义的类中没有定义as_vie ...
- DRF (Django REST framework) 框架介绍
Web应用模式 在开发Web应用中,有两种应用模式: 前后端不分离 前后端分离 1 前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控 ...
- python面向对象类的成员_Python面向对象中类的成员
Python面向对象中类的成员总共有三种,分别是字段.方法和属性 Python Version: 3.5+ 字段 普通字段1 2 3 4 5 6 7 8class A: def __init__(se ...
- Django Rest framework (看完直接上手用)
Restframework DjangoRestframework 主要使用 APIView 类,其 APIView 实质是对 View 进行继承加工了更多功能 请求进来 APIView() 首先执行 ...
- 【武sir】django rest framework源码和实战_day01(上)
(0)摘要 # 课程链接 4天搞定django rest framework源码和实战_哔哩哔哩_bilibili # 课程内容 (1)内容概要_略 (2)内容回顾_略 (3)django 视图之 C ...
- web前端培训分享:面向对象中类和对象的定义是什么?
在学习web前端技术的时候,我们接触的最多的便是面向对象这一块,其实很多编程技术都有用到这个现象,下面我们就为大家详细的介绍一下面向对象中类和对象的定义是什么? web前端培训分享:面向对象中类和对象 ...
- 03 Django REST Framework 视图和路由
01-DRF中的request 在Django REST Framework中内置的Request类扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等. 比如,区别 ...
- Django REST framework 简介
1.在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的. 2.在开发REST API的视图中,虽然每个视图具体操作的数据不同,但增.删.改. ...
- Django REST framework API 指南(2):响应
Django REST framework API 指南(1):请求 Django REST framework API 指南(2):响应 Django REST framework API 指南(3 ...
最新文章
- 五年之后,你的企业是拥抱AI,还是已被淘汰
- Prometheus 有瓶颈?怎么打造企业级监控系统?
- Java中的==和equals区别
- python 发送邮件不显示附件_python无法通过电子邮件发送附件文件
- C++确定一个字符串是否是另一个字符串的排列的算法(附完整源码)
- 《xUnit Test Patterns》学习笔记4 - Principles of Test Automation
- (WPF) DataGrid之绑定
- 基于CSMA -CA协议的无线星型网络的应用案例介绍
- mysql多大_洞悉MySQL底层架构:游走在缓冲与磁盘之间
- js根据name获取value_js 函数的重载
- TensorFlow和Keras入门必读教程
- 有了这款IDEA插件,再也不需要postman了
- 详解恶意软件 XcodeSpy 如何针对 iOS 开发人员展开供应链攻击
- 【常用表】线性代数公式
- 计算机3c认证 标准,计算机3C认证怎么办理,检测标准是什么?
- 脉内分析从零开始(持续更新)
- Android蓝牙自动配对Demo,亲测好使!!!
- hyperledger环境搭建(mac11.1、ubunt20)
- python显示图片image_用Python语言显示图片的倒影效果
- OLED_I2C_SH1106屏幕教程