File tree Expand file tree Collapse file tree 3 files changed +8
-4
lines changed
Expand file tree Collapse file tree 3 files changed +8
-4
lines changed Original file line number Diff line number Diff line change 22
33#特殊方法(2)
44
5- 书接上回,不管是实例还是类,都用` __dict__ ` 来存储属性和方法,可以笼统地把属性和方法称为成员或者特性,用一句笼统的话说 ,就是` __dict__ ` 存储对象成员。但,有时候访问的对象成员没有存在其中,就是这样:
5+ 书接上回,不管是实例还是类,都用` __dict__ ` 来存储属性和方法,可以笼统地把属性和方法称为成员或者特性,一句话概括 ,就是` __dict__ ` 存储对象成员。但,有时候访问的对象成员没有存在其中,就是这样:
66
77 >>> class A(object):
88 ... pass
2121
2222##` __getattr__ ` 、` __setattr__ ` 和其它类似方法
2323
24- 还是用上面的例子,如果访问` a.x ` ,它不存在,那么就要转向到某个操作。我们把这种情况称之为“拦截”。就好像“寻隐者不遇”,却被童子“遥指杏花村”,将你“拦截”了。在python中 ,有一些方法就具有这种“拦截”能力。
24+ 还是用上面的例子,如果访问` a.x ` ,它不存在,那么就要转向到某个操作。我们把这种情况称之为“拦截”。就好像“寻隐者不遇”,却被童子“遥指杏花村”,将你“拦截”了。在Python中 ,有一些方法就具有这种“拦截”能力。
2525
2626- ` __setattr__(self,name,value) ` :如果要给name赋值,就调用这个方法。
2727- ` __getattr__(self,name) ` :如果name被访问,同时它不存在的时候,此方法被调用。
225225
226226这就是通过实例查找特性的顺序。
227227
228+ ##双下划线
229+
230+ 至此,是否注意到,我们使用很多以双下划线开头和结尾的方法名,比如` __dict__ ` ,` __init__ ` 个。在Python中,用这种方法表示特殊的方法名,当然,这是一个惯例,之所以这样做,主要是确保这些特殊的方法名不会跟你自己所定义的名称冲突,我们自己定义名称的时候,是绝少用双划线开头和结尾的。如果你需要重写这些方法,当然是可以的,具体参看前文关于继承的讲述。
231+
228232------
229233
230234[ 总目录] ( ./index.md )   ;  ;  ; |  ;  ;  ; [ 上节:特殊方法(1)] ( ./212.md )   ;  ;  ; |  ;  ;  ; [ 下节:迭代器] ( ./214.md )
Original file line number Diff line number Diff line change 68685 . [ 类(5)] ( ./210.md ) ==>静态方法和类方法,两者的区别,类的文档
69696 . [ 多态和封装] ( ./211.md ) ==>多态,封装和私有化
70707 . [ 特殊方法(1)] ( ./212.md ) ==>` __dict__ ` 和` __slots__ `
71- 8 . [ 特殊方法(2)] ( ./213.md ) ==>` __getattr__ ` ,` __setattr__ ` 以及查找属性顺序
71+ 8 . [ 特殊方法(2)] ( ./213.md ) ==>` __getattr__ ` ,` __setattr__ ` 以及查找属性顺序,双划线解释
72729 . [ 迭代器] ( ./214.md ) ==>迭代器方法` __iter__ ` ,` netx() `
737310 . [ 生成器] ( ./215.md ) ==>生成器定义,yield,生成器方法
747411 . [ 上下文管理器] ( ./235.md ) ==>上下文管理器的基本概念,使用方法和contextlib模块
Original file line number Diff line number Diff line change 68685 . [ 类(5)] ( ./210.md ) ==>静态方法和类方法,两者的区别,类的文档
69696 . [ 多态和封装] ( ./211.md ) ==>多态,封装和私有化
70707 . [ 特殊方法(1)] ( ./212.md ) ==>` __dict__ ` 和` __slots__ `
71- 8 . [ 特殊方法(2)] ( ./213.md ) ==>` __getattr__ ` ,` __setattr__ ` 以及查找属性顺序
71+ 8 . [ 特殊方法(2)] ( ./213.md ) ==>` __getattr__ ` ,` __setattr__ ` 以及查找属性顺序,双划线解释
72729 . [ 迭代器] ( ./214.md ) ==>迭代器方法` __iter__ ` ,` netx() `
737310 . [ 生成器] ( ./215.md ) ==>生成器定义,yield,生成器方法
747411 . [ 上下文管理器] ( ./235.md ) ==>上下文管理器的基本概念,使用方法和contextlib模块
You can’t perform that action at this time.
0 commit comments