X Tutup
Skip to content

Commit a01ac18

Browse files
committed
about double _
1 parent 23b140c commit a01ac18

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

213.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
#特殊方法(2)
44

5-
书接上回,不管是实例还是类,都用`__dict__`来存储属性和方法,可以笼统地把属性和方法称为成员或者特性,用一句笼统的话说,就是`__dict__`存储对象成员。但,有时候访问的对象成员没有存在其中,就是这样:
5+
书接上回,不管是实例还是类,都用`__dict__`来存储属性和方法,可以笼统地把属性和方法称为成员或者特性,一句话概括,就是`__dict__`存储对象成员。但,有时候访问的对象成员没有存在其中,就是这样:
66

77
>>> class A(object):
88
... pass
@@ -21,7 +21,7 @@
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被访问,同时它不存在的时候,此方法被调用。
@@ -225,6 +225,10 @@
225225

226226
这就是通过实例查找特性的顺序。
227227

228+
##双下划线
229+
230+
至此,是否注意到,我们使用很多以双下划线开头和结尾的方法名,比如`__dict__``__init__`个。在Python中,用这种方法表示特殊的方法名,当然,这是一个惯例,之所以这样做,主要是确保这些特殊的方法名不会跟你自己所定义的名称冲突,我们自己定义名称的时候,是绝少用双划线开头和结尾的。如果你需要重写这些方法,当然是可以的,具体参看前文关于继承的讲述。
231+
228232
------
229233

230234
[总目录](./index.md)   |   [上节:特殊方法(1)](./212.md)   |   [下节:迭代器](./214.md)

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
5. [类(5)](./210.md)==>静态方法和类方法,两者的区别,类的文档
6969
6. [多态和封装](./211.md)==>多态,封装和私有化
7070
7. [特殊方法(1)](./212.md)==>`__dict__``__slots__`
71-
8. [特殊方法(2)](./213.md)==>`__getattr__`,`__setattr__`以及查找属性顺序
71+
8. [特殊方法(2)](./213.md)==>`__getattr__`,`__setattr__`以及查找属性顺序,双划线解释
7272
9. [迭代器](./214.md)==>迭代器方法`__iter__`,`netx()`
7373
10. [生成器](./215.md)==>生成器定义,yield,生成器方法
7474
11. [上下文管理器](./235.md)==>上下文管理器的基本概念,使用方法和contextlib模块

index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
5. [类(5)](./210.md)==>静态方法和类方法,两者的区别,类的文档
6969
6. [多态和封装](./211.md)==>多态,封装和私有化
7070
7. [特殊方法(1)](./212.md)==>`__dict__``__slots__`
71-
8. [特殊方法(2)](./213.md)==>`__getattr__`,`__setattr__`以及查找属性顺序
71+
8. [特殊方法(2)](./213.md)==>`__getattr__`,`__setattr__`以及查找属性顺序,双划线解释
7272
9. [迭代器](./214.md)==>迭代器方法`__iter__`,`netx()`
7373
10. [生成器](./215.md)==>生成器定义,yield,生成器方法
7474
11. [上下文管理器](./235.md)==>上下文管理器的基本概念,使用方法和contextlib模块

0 commit comments

Comments
 (0)
X Tutup