>æä»¬æ¢èææ¯ï¼åäºè¿èåï¼å°±ä¸ä¸§èï¼ä¹å°é£äºææ§å¯è»çäºå¼ç»äºï¼ä¸è¡è¯¡è¯ï¼ä¸è°¬è®²ç¥çéçï¼åªå°çç表æåºæ¥ï¼å¥½å¨ç¥é¢åæèªå·±èä¸å人çè¯å¿ã(2 CORINTHIANS 4:1-2)
#ç¹æ®æ¹æ³(1)
æ¢ç©¶æ´å¤çç±»å±æ§ï¼å¨ä¸äºåå¦è
çæç¨ä¸ï¼ä¸è¬å¾å°è§ãæä¹æä»¥è¦å¨è¿éä¹å°è¿é¨åå¥ç®åºæ¥ï¼å°±æ¯å ä¸ºæ¬æç¨æ¯âFrom Beginner to Masterâãå½ç¶ï¼ä¸æ¯å¦ä¹ äºç±»çæ´å¤å±æ§å°±è½è¾¾å°Masteræ°´å¹³ï¼ä½æ¯è¿æ¯éå¾Masterç䏿¥ï¼è½ç¶å¨å级åºç¨ä¸ï¼æ¬èä¹è³äºåé¢å
³äºç±»ç屿§ç¨çä¸å¾å¤ï¼ä½æ¯ï¼è¿ä¸æ¥è¿åºå»ï¼ä½ å°±ä¼å¨å®è·µä¸æä¸ä¸ªå°è±¡ï¼ä»¥åéè¦ç¨å°äºï¼ç¥éæè¿ä¸æ¥ï¼ä¼å¯¹é¡¹ç®æå¸®å©çãä¿è¯è¯´âèºä¸å身âã
##`__dict__`
åé¢å·²ç»å¦ä¹ è¿æå
³ç±»å±æ§åå®ä¾å±æ§çå
容ï¼å¹¶ä¸åäºåºåï¼å¦æå¿è®°äºå¯ä»¥å头åé
[ãç±»(3)ã](./208.md)ä¸çâç±»å±æ§åå®ä¾å±æ§âé¨åãæä¸ä¸ªç»è®ºï¼æ¯ä¸å®è¦çæçï¼é£å°±æ¯å¯ä»¥éè¿`object.attribute`çæ¹å¼è®¿é®å¯¹è±¡ç屿§ã
妿æ¥çé£é¨åå
容ï¼è¯»è
æ¯å¦æèè¿ä¸ä¸ªé®é¢ï¼ç±»æè
å®ä¾å±æ§ï¼å¨python䏿¯æä¹åå¨çï¼æè
为ä»ä¹ä¿®æ¹æè
å¢å ãå é¤å±æ§ï¼æä»¬è½ä¸è½æ§å¶è¿äºå±æ§ï¼
>>> class A(object):
... pass
...
>>> a = A()
>>> dir(a)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>> dir(A)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
ç¨`dir()`æ¥æ¥çä¸ä¸ï¼åç°ä¸ç®¡æ¯ç±»è¿æ¯å®ä¾ï¼é½æå¾å¤å±æ§ï¼è¿å¨åé¢å·²ç»åå¤åºç°ï¼æç¹è§æªä¸æªäºãä¸è¿ï¼è¿éæä»¬è¦çä¸ä¸ªå±æ§ï¼`__dict__`ï¼å ä¸ºå®æ¯ä¸ä¸ªä¿åç§å¯çä¸è¥¿ï¼å¯¹è±¡ç屿§ã
>>> class Spring(object):
... season = "the spring of class"
...
>>> Spring.__dict__
dict_proxy({'__dict__': ,
'season': 'the spring of class',
'__module__': '__main__',
'__weakref__': ,
'__doc__': None})
为äºä¾¿äºè§å¯ï¼æå°ä¸é¢çæ¾ç¤ºç»æè¿è¡äºæ¢è¡ï¼æ¯ä¸ªé®å¼å¯¹ä¸è¡ã
对äºç±»Springç`__dict__`屿§ï¼å¯ä»¥åç°ï¼æä¸ä¸ªé®`'season'`ï¼è¿å°±æ¯è¿ä¸ªç±»ç屿§ï¼å
¶å¼å°±æ¯ç±»å±æ§çæ°æ®ã
>>> Spring.__dict__['season']
'the spring of class'
>>> Spring.season
'the spring of class'
ç¨è¿ä¸¤ç§æ¹å¼é½è½å¾å°ç±»å±æ§çå¼ãæè
说`Spring.__dict__['season']`å°±æ¯è®¿é®ç±»å±æ§ãä¸é¢å°è¿ä¸ªç±»å®ä¾åï¼åççå®çå®ä¾å±æ§ï¼
>>> s = Spring()
>>> s.__dict__
{}
å®ä¾å±æ§ç`__dict__`æ¯ç©ºçãæç¹å¥æªï¼ä¸å¥æªï¼æ¥ççï¼
>>> s.season
'the spring of class'
è¿ä¸ªå
¶å®æ¯æåäºç±»å±æ§ä¸ç`Spring.season`ï¼è³æ¤ï¼æä»¬å
¶å®è¿æ²¡æå»ºç«ä»»ä½å®ä¾å±æ§å¢ãä¸é¢å°±å»ºç«ä¸ä¸ªå®ä¾å±æ§ï¼
>>> s.season = "the spring of instance"
>>> s.__dict__
{'season': 'the spring of instance'}
è¿æ ·ï¼å®ä¾å±æ§éé¢å°±ä¸ç©ºäºãè¿æ¶å建ç«çå®ä¾å±æ§åä¸é¢çé£ä¸ª`s.season`åªä¸è¿éåï¼å¹¶ä¸æå®âé®çâäºãè¿å¥å¥½æ¯ä¸æ¯çæï¼å 为å¨è®²è¿°âå®ä¾å±æ§âåâç±»å±æ§âçæ¶åå°±æå°äºãç°å¨è¯»è
è¯å®çè§£æ´æ·±å
¥äºã
>>> s.__dict__['season']
'the spring of instance'
>>> s.season
'the spring of instance'
æ¤æ¶ï¼é£ä¸ªç±»å±æ§å¦ä½ï¼æä»¬ççï¼
>>> Spring.__dict__['season']
'the spring of class'
>>> Spring.__dict__
dict_proxy({'__dict__': , 'season': 'the spring of class', '__module__': '__main__', '__weakref__': , '__doc__': None})
>>> Spring.season
'the spring of class'
Springçç±»å±æ§æ²¡æåå°å®ä¾å±æ§çå½±åã
æç
§åé¢çè®²è¿°ç±»å±æ§åå®ä¾çæçæä½ï¼å¦æè¿æ¶åå°åé¢çå®ä¾å±æ§å é¤ï¼ä¼ä¸ä¼åå°å®ä¾å±æ§`s.__dict__`为空å¢ï¼
>>> del s.season
>>> s.__dict__
{}
>>> s.season
'the spring of class'
æç¶æååå½¢ã
å½ç¶ï¼ä½ å¯ä»¥å®ä¹å
¶å®åç§°çå®ä¾å±æ§ï¼å®ä¸æ ·è¢«åå¨å°`__dict__`屿§éé¢ï¼
>>> s.lang = "python"
>>> s.__dict__
{'lang': 'python'}
>>> s.__dict__['lang']
'python'
è¯ç¶ï¼è¿æ ·åä»
ä»
æ¯æ´æ¹äºå®ä¾ç`__dict__`å
容ï¼å¯¹`Spring.__dict__`æ ä»»ä½å½±åï¼ä¹å°±æ¯è¯´éè¿`Spring.lang`æè
`Spring.__dict__['lang']`æ¯å¾ä¸å°ä¸è¿°ç»æçã
>>> Spring.lang
Traceback (most recent call last):
File "", line 1, in
AttributeError: type object 'Spring' has no attribute 'lang'
>>> Spring.__dict__['lang']
Traceback (most recent call last):
File "", line 1, in
KeyError: 'lang'
é£ä¹ï¼å¦æè¿æ ·æä½ï¼ä¼ææ ·å¢ï¼
>>> Spring.flower = "peach"
>>> Spring.__dict__
dict_proxy({'__module__': '__main__',
'flower': 'peach',
'season': 'the spring of class',
'__dict__': , '__weakref__': , '__doc__': None})
>>> Spring.__dict__['flower']
'peach'
å¨ç±»ç`__dict__`è¢«æ´æ¹äºï¼ç±»å±æ§ä¸å¢å äºä¸ä¸ª'flower'屿§ã使¯ï¼å®ä¾ç`__dict__`ä¸å¦ä½ï¼
>>> s.__dict__
{'lang': 'python'}
没æè¢«ä¿®æ¹ãæä¹æ¯è¿ä¹æ³çï¼ååãä½ æ¤åè¿è¿ä¹è§å¾åï¼ç¶èï¼è¿è½è¿æ ·ï¼
>>> s.flower
'peach'
è¿ä¸ªè¯»è
æ¯å¦è½è§£éï¼å
¶å®ååå°äºåé¢ç¬¬ä¸ä¸ªåºç°`s.season`ä¸é¢äºã
éè¿ä¸é¢æ¢è®¨ï¼æ¯ä¸æ¯åºæ¬çè§£äºå®ä¾åç±»ç`__dict__`ï¼å¹¶ä¸ä¹çå°äºå±æ§çååç¹ç¹ãç¹å«æ¯ï¼è¿äºå±æ§é½æ¯å¯ä»¥å¨æååçï¼å°±æ¯ä½ å¯ä»¥éæ¶ä¿®æ¹åå¢å ã
屿§å¦æ¤ï¼æ¹æ³å¢ï¼ä¸é¢å°±ççæ¹æ³ï¼ç±»ä¸ç彿°ï¼ã
>>> class Spring(object):
... def tree(self, x):
... self.x = x
... return self.x
...
>>> Spring.__dict__
dict_proxy({'__dict__': ,
'__weakref__': ,
'__module__': '__main__',
'tree': ,
'__doc__': None})
>>> Spring.__dict__['tree']
ç»æè·åé¢è®¨è®ºå±æ§å·®ä¸å¤ï¼æ¹æ³`tree`ä¹å¨`__dict__`éé¢å¢ã
>>> t = Spring()
>>> t.__dict__
{}
åè·åé¢ä¸æ ·ãè½ç¶å»ºç«äºå®ä¾ï¼ä½æ¯å¨å®ä¾ç`__dict__`䏿²¡ææ¹æ³ãæ¥ä¸æ¥ï¼æ§è¡ï¼
>>> t.tree("xiangzhangshu")
'xiangzhangshu'
å¨[ç±»(3)](./208.md)䏿ä¸é¨åå
容éè¿°âæ°æ®æµè½¬âï¼å
¶ä¸æä¸å¼ å¾ï¼å
¶ä¸é常æç¡®æ¾ç¤ºåºï¼å½ç¨ä¸é¢æ¹å¼æ§è¡æ¹æ³çæ¶åï¼å®ä¾`t`ä¸`self`建ç«äºå¯¹åºå
³ç³»ï¼ä¸¤è
æ¯ä¸ä¸ªå¤ä¸ä¸ªå
ã卿¹æ³ä¸`self.x = x`ï¼å°xçå¼ç»äºself.xï¼ä¹å°±æ¯å®ä¾åºè¯¥æ¥æäºè¿ä¹ä¸ä¸ªå±æ§ã
>>> t.__dict__
{'x': 'xiangzhangshu'}
æç¶å¦æ¤ãè¿ä¹å°è¯äºå®ä¾`t`å`self`çå
³ç³»ï¼å³å®ä¾æ¹æ³(`t.tree('xiangzhangshu')`)ç第ä¸ä¸ªåæ°(selfï¼ä½æ²¡æååºæ¥)ç»å®å®ä¾tï¼éè¿self.xæ¥è®¾å®å¼ï¼å³ç»`t.__dict__`æ·»å 屿§å¼ã
æ¢ä¸ä¸ªè§åº¦ï¼
>>> class Spring(object):
... def tree(self, x):
... return x
...
è¿åæ¹æ³ä¸æ²¡æå°xèµå¼ç»selfç屿§ï¼èæ¯ç´æ¥returnï¼ç»ææ¯ï¼
>>> s = Spring()
>>> s.tree("liushu")
'liushu'
>>> s.__dict__
{}
æ¯ä¸æ¯çè§£æ´æ·±å
¥äºï¼
ç°å¨éè¦å¯¹pythonä¸ä¸ä¸ªè§ç¹ï¼âä¸åç对象âï¼åæ·±å
¥é¢æã以ä¸ä¸ç®¡æ¯ç±»è¿æ¯çå®ä¾ç屿§åæ¹æ³ï¼é½æ¯ç¬¦å`object.attribute`æ ¼å¼ï¼å¹¶ä¸å±æ§ç±»ä¼¼ã
å½ä½ çå°è¿éçæ¶åï¼è¦ä¹æç½äºç±»åå®ä¾ç`__dict__`çç¹ç¹ï¼è¦ä¹å°±ç³æ¶äºãç³æ¶ä¹ä¸è¦ç´§ï¼åå°ä¸é¢çéå¤ä¸éï¼ç¹å«æ¯èªå·±è¦æ²ä¸æ²æå
³ä»£ç ãï¼å»ºè®®ä¸ä¸ªæå¥½çæ¹æ³ï¼ç¨ä¸¤ä¸ªæ¾ç¤ºå¨ï¼ä¸ä¸ªæ¾ç¤ºå¨çæ¬æç¨ï¼å¦å¤ä¸ä¸ªæ¾ç¤ºå¨æ²ä»£ç ãäºåååçææãï¼
éè¦è¯´æï¼æä»¬å¯¹`__dict__`çæ¢è®¨è¿çæä¸ä¸ªå°¾å·´ï¼å±æ§æç´¢è·¯å¾ãè¿ä¸ªçå¨åé¢è®²è¿°ã
ä¸ç®¡æ¯ç±»è¿æ¯å®ä¾ï¼å
¶å±æ§é½è½éæå¢å ãè¿ç¹å¨ææ¶å䏿¯ä¸ä»¶å¥½äºæ
ï¼æè®¸å¨æäºæ¶åä½ ä¸å¸æå«äººå¢å 屿§ãæåæ³åï¼å½ç¶æï¼è¯·ç»§ç»å¦ä¹ ã
##`__slots__`
é¦å
声æï¼`__slots__`è½å¤éå¶å±æ§çå®ä¹ï¼ä½æ¯è¿ä¸æ¯å®åå¨ç»æç®æ ï¼å®åå¨çç»æç®æ æ´åºè¯¥æ¯ä¸ä¸ªå¨ç¼ç¨ä¸é常éè¦çæ¹é¢ï¼**ä¼åå
å使ç¨ã**
>>> class Spring(object):
... __slots__ = ("tree", "flower")
...
>>> dir(Spring)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', 'flower', 'tree']
ä»ç»çç`dir()`çç»æï¼è¿æ`__dict__`屿§åï¼æ²¡æäºï¼ç确没æäºãä¹å°±æ¯è¯´`__slots__`æ`__dict__`æ¤åºå»äºï¼å®è¿å
¥äºç±»ç屿§ã
>>> Spring.__slots__
('tree', 'flower')
è¿éå¯ä»¥çåºï¼ç±»Springæä¸ä»
æä¸¤ä¸ªå±æ§ã
>>> t = Spring()
>>> t.__slots__
('tree', 'flower')
å®ä¾åä¹åï¼å®ä¾ç`__slots__`ä¸ç±»çå®å
¨ä¸æ ·ï¼è¿è·åé¢ç`__dict__`大ä¸ä¸æ ·äºã
>>> Spring.tree = "liushu"
éè¿ç±»ï¼å
èµäºä¸ä¸ªå±æ§å¼ãç¶åï¼æ£éªä¸ä¸å®ä¾è½å¦ä¿®æ¹è¿ä¸ªå±æ§ï¼
>>> t.tree = "guangyulan"
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'Spring' object attribute 'tree' is read-only
çæ¥ï¼æä»¬çæå¾ä¸è½è¾¾æï¼æ¥éä¿¡æ¯ä¸æ¾ç¤ºï¼`tree`è¿ä¸ªå±æ§æ¯åªè¯»çï¼ä¸è½ä¿®æ¹äºã
>>> t.tree
'liushu'
å 为åé¢å·²ç»éè¿ç±»ç»è¿ä¸ªå±æ§èµå¼äºãä¸è½ç¨å®ä¾å±æ§æ¥ä¿®æ¹ãåªè½ï¼
>>> Spring.tree = "guangyulan"
>>> t.tree
'guangyulan'
ç¨ç±»å±æ§ä¿®æ¹ã使¯å¯¹äºæ²¡æç¨ç±»å±æ§èµå¼çï¼å¯ä»¥éè¿å®ä¾å±æ§ï¼
>>> t.flower = "haitanghua"
>>> t.flower
'haitanghua'
使¤æ¶ï¼
>>> Spring.flower
å®ä¾å±æ§çå¼å¹¶æ²¡æä¼ åå°ç±»å±æ§ï¼ä½ ä¹å¯ä»¥ç解为æ°å»ºç«äºä¸ä¸ªååçå®ä¾å±æ§ã妿åç»ç±»å±æ§èµå¼ï¼é£ä¹å°±ä¼è¿æ ·äºï¼
>>> Spring.flower = "ziteng"
>>> t.flower
'ziteng'
å½ç¶ï¼æ¤æ¶å¨ç»`t.flower`éæ°èµå¼ï¼å°±ä¼çåºè·åé¢ä¸æ ·çé误äºã
>>> t.water = "green"
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'Spring' object has no attribute 'water'
è¿éè¯å¾ç»å®ä¾æ°å¢ä¸ä¸ªå±æ§ï¼ä¹å¤±è´¥äºã
çæ¥`__slots__`å·²ç»æå®ä¾å±æ§ç¢ç¢å°ç®¡æ§äºèµ·æ¥ï¼ä½æ´æ¬è´¨æ¯çæ¯ä¼åäºå
åãè¯ç¶ï¼è¿ç§ä¼åä¼å¨å¤§éçå®ä¾æ¶åæ¾åºææã
------
[æ»ç®å½](./index.md) | [ä¸èï¼å¤æåå°è£
](./211.md) | [ä¸èï¼ç¹æ®æ¹æ³(2)](./213.md)
å¦æä½ è®¤ä¸ºæå¿
è¦æèµæï¼è¯·éè¿æ¯ä»å®ï¼**[email protected]**,ä¸èææ¿ã