零散的知识点
学是学不完的,重点掌握的是编程思想,看文档看源码解决问题的能力.不同的框架都是相通的.
何为方法?何为函数?
函数 -- 有几个值就传几个值.
方法 -- 会自动传值
绑定方法
绑定给类的方法,对象可以调用吗?可以! 会自动将对象所在的类传入.
绑定给对象的方法,类可以调用吗?可以! 该方法会被变成普通函数被类调用,有几个值就传几个值.
(So,方法不一定就是方法,要看谁来调用!)
Ps: 类.类方法() -- BookView.as_view()
静态方法(严格意义上来将静态方法是函数,我们称呼其为方法罢了!)
何为接口、鸭子类型?
父类有run、speak方法,继承它的子类也有!就是鸭子类型!
虽然python推崇"鸭子类型"(口头约束),但这在实际的编码中不好.
我们通常会写"接口"(强制约束),父类强制的规范子类必须要有哪些方法!接口强制约束/规范了子类的行为 -- abc模块、raise
何为继承、何为派生? -- python不太讲究这两玩意儿的区别.
class Animal:
def run(a,b):pass
# -- 子类又叫做派生类是因为子类比父类多了一些东西.
class Person(Animal):
# def run(a,b):pass # -- 参数都完全一样,重写
def run(a,c):pass # -- 参数不一样,派生
def speak():pass # -- 此方法也叫做派生方法,因为父类没有
Http协议?
请求协议 - 请求首行、请求头、请求体 请求体有三种编码格式,请求头里常用的属性:cookie
响应协议 - 响应首行、响应头、响应体 响应头里常用的属性:cookie(k-v的形式)
猴子补丁?
对象也好、类也好,在执行过程中动态的替换对象的属性或方法.就叫做猴子补丁!! -- ViewSetMixin的源码就应用啦!!
问: 在浏览器中输入一个地址, 一直到数据返回, 整个经历的过程.
深浅拷贝问题?
Ps: queryset对象有个内置的拷贝方法, qs._clone 看源码就晓得了.里面作者注释写的明明白白.
from copy import copy, deepcopy
l = [1, 2, 4]
l2 = [5, 6, l]
# -- 直接赋值
l3 = l2
l3[0] = 1
print(l3) # [1, 6, [1, 2, 4]]
print(l2) # [1, 6, [1, 2, 4]]
# -- 浅拷贝(只拷贝了一层,第二层的id号是一样的)
l4 = copy(l2)
l4[0] = 11
print(l4) # [11, 6, [1, 2, 4]]
print(l2) # [1, 6, [1, 2, 4]]
l4[2][1] = 999
print(l4) # [11, 6, [1, 999, 4]]
print(l2) # [1, 6, [1, 999, 4]]
print(id(l4[2]), id(l2[2])) # 140307003830720 140307003830720
# -- 深拷贝(递归拷贝,第二层的id号不一样)
l5 = deepcopy(l2)
l5[2][2] = 777
print(l5) # [1, 6, [1, 999, 777]]
print(l2) # [1, 6, [1, 999, 4]]
print(id(l5[2]), id(l2[2])) # 140307003831808 140307003830720
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69