# ç±» class 1.Pythonä¸ï¼ç±»`class`ä¸å®ä¾`instance`æ¯ä¸¤ç§ä¸åç对象类å * 类对象æ¯å®ä¾å¯¹è±¡çå·¥å * 类对象ä¸å®ä¾å¯¹è±¡é½æåèªç¬ç«çå½åç©ºé´ * 类对象æ¥èªäºç±»å®ä¹è¯å¥ï¼å®ä¾å¯¹è±¡æ¥èªäºå½æ°è°ç¨è¯å¥ * å®ä¾å¯¹è±¡å¯èªå¨åå类对象ä¸çåéå 2.ç±»çå®ä¹ï¼ ``` class class_name: name1=val def method(self): pass ``` * `class`è¯å¥ç±»ä¼¼äº`def`è¯å¥ï¼ä¹æ¯å¯æ§è¡è¯å¥ãæ§è¡æ¶ä¼äº§çæ°ç类对象ï¼å¹¶å°è¯¥ç±»å¯¹è±¡èµå¼ç»åéåï¼å³ç±»åï¼ * `class`è¯å¥å çé¡¶å±èµå¼è¯å¥ä¼å建类ç屿§ã`class`è¯å¥å建çä½ç¨åä¼æä¸ºç±»å±æ§çå½åç©ºé´ > 妿æ¯`class`å ç`def`ä¸çèµå¼è¯å¥ï¼åå¹¶ä¸ä¼å建类ç屿§ * ç±»å±æ§ä¸ºææçå®ä¾å¯¹è±¡æä¾ç¶æåè¡ä¸ºï¼å®æ¯ç±è¯¥ç±»åå»ºçææå®ä¾å¯¹è±¡å ±äº«ç 3.çæå®ä¾å¯¹è±¡ï¼ ``` instance_name=class_name() ``` * å彿°é£æ ·è°ç¨ç±»å¯¹è±¡ä¼å建æ°çå®ä¾å¯¹è±¡ã * æ¯æ¬¡è°ç¨æ¶ï¼åä¼è¿åæ°çå®ä¾å¯¹è±¡ * æ¯ä¸ªå®ä¾å¯¹è±¡é½æèªå·±çå½å空é´ãåä¸ä¸ªç±»çå®ä¾å¯¹è±¡ä¸ä¸å®å±æ§é½ç¸å * æ¯ä¸ä¸ªå®ä¾å¯¹è±¡ç»§æ¿ç±»ç屿§å¹¶å建äºèªå·±çå½åç©ºé´ * ç±»å建çå®ä¾å¯¹è±¡æ¯ææ°çå½å空é´ãåå¼å§è¯¥å½åç©ºé´æ¯ç©ºçï¼ ä½å®ä¼ç»§æ¿å建该å®ä¾æå±ç±»å¯¹è±¡ç屿§ã * ç»§æ¿çæææ¯ï¼è½ç¶å®ä¾å¯¹è±¡çå½åç©ºé´æ¯ç©ºçã 使¯å忥æ¾ä¼èªå¨ä¸åå°ç±»å¯¹è±¡çåå空é´å»æ¥æ¾ * å¨ç±»ç`def`ä¸ï¼ç¬¬ä¸ä¸ªåæ°ï¼æ ¹æ®æ¯ä¾ç§°ä¸º`self`ï¼ä¼å¼ç¨è°ç¨è¯¥å½æ°çå®ä¾å¯¹è±¡ã对`self`ç屿§èµå¼ï¼ä¼å建æä¿®æ¹å®ä¾å¯¹è±¡ç屿§ï¼èéç±»ç屿§ã * å¯ä»¥éè¿æ¹æ³è°ç¨ï¼ `instance_name.func()` * ä¹å¯ä»¥éè¿ç±»è°ç¨ï¼ `class_name.func(instance_name)`  4.ä¸C++ä¸åï¼Pythonç`class`è¯å¥æ¯ä¸ä¸ªå¯æ§è¡è¯å¥ï¼ä¸æ¯éå¼èµå¼çã 5.å¯ä»¥å¨`class`è¯å¥å¤åå»ºç±»å¯¹è±¡çæ°å±æ§ï¼éè¿åç±»å¯¹è±¡ç´æ¥èµå¼æ¥å®ç°ã ``` classA.attr=val ``` å¯ä»¥å¨`class`è¯å¥å¤å建å®ä¾å¯¹è±¡çæ°å±æ§ï¼éè¿åå®ä¾å¯¹è±¡ç´æ¥èµå¼æ¥å®ç°ã ``` a=classA() a.attr=val ```  6.ç±»å¯ä»¥ç»§æ¿ã被继æ¿çç±»ç§°ä¸ºè¶ ç±»ï¼ç»§æ¿ç±»ç§°ä¸ºåç±»ã ``` class childC (parentC): # childC为åç±»ï¼parentCä¸ºè¶ ç±» pass ``` * 类对象ä¼ç»§æ¿å ¶è¶ 类对象ä¸å®ä¹çææç±»å±æ§åç§°ãè¯»å±æ§æ¶ï¼è¥è¯¥å±æ§ä¸åå¨äºæ¬ç±»ä¸ï¼Pythonä¼èªå¨å¨è¶ ç±»çå½å空é´ä¸å¯»æ¾ >è¥æ¯å屿§ï¼åä¼å建æ°å±æ§ï¼æ¤æ¶ä» æä½æ¬ç±»çå½å空é´ï¼ * å®ä¾å¯¹è±¡ä¼ç»§æ¿ææå¯è®¿é®å°çç±»ç屿§ã读åéåæ¶ï¼Pythonä¼é¦å æ£æ¥å®ä¾çå½å空é´ï¼ç¶åæ¯ç±»çå½å空é´ï¼æåæ¯æ²¿ç»§æ¿é¾æ¥æ¾ææè¶ ç±»çå½åç©ºé´ * è¥åç±»éæ°å®ä¹äºè¶ ç±»çåéåï¼æ 论æ¯å¨`class`å é¨å®ä¹ï¼è¿æ¯å¨`class`å¤é¨éè¿èµå¼æ¥å®ä¹ï¼ï¼åç±»ä¼å代并å®å¶æç»§æ¿çè¡ä¸ºãè¿ç§°ä¸ºéè½½  7.类对象ç `.__dict__`屿§æ¯ç±»å¯¹è±¡çå½å空é´ï¼æ¯ä¸ä¸ªç±»åå ¸å¯¹è±¡`mappingproxy`对象 ï¼ å®ä¾å¯¹è±¡ç `.__dict__`屿§æ¯å®ä¾å¯¹è±¡çå½å空é´ï¼æ¯ä¸ä¸ªåå ¸ï¼ éè¿æ¥çå®ä»¬å¯ä»¥è½»æå°æ¥çå°ç»§æ¿æ çå屿§  8.å®ä¾å¯¹è±¡ç`.__class__`屿§æ¯å®æå±çç±» 类对象ç`__bases__`屿§æ¯å®è¶ 类对象çå ç» ç±»å¯¹è±¡ç`__name__`屿§æ¯ç±»å  9.å¨åç±»ä¸è°ç¨è¶ ç±»çæ¹æ³ï¼`superClass.func(obj,args)`ï¼å ¶ä¸`obj`é常为`self`  10.Pythonçç»§æ¿ä¸C++ç»§æ¿ä¸åãå¨Pythonä¸ï¼å½å¯¹è±¡éè¿ç¹å·è¿ç®è¯»å屿§å¼æ¶å°±ä¼åçç»§æ¿ï¼è䏿¶åäºæç´¢å±æ§å®ä¹æ ã * æ¯æ¬¡ä½¿ç¨`name.attr`æ¶(`name`为å®ä¾å¯¹è±¡æè 类对象ï¼ï¼Pythonä¼ä»åºé¨åä¸æç´¢å½åç©ºé´æ ãå 仿¬å¯¹è±¡çå½å空é´å¼å§ï¼ä¸ç´æç´¢å°ç¬¬ä¸ä¸ªæ¾å°ç`attr`åå就忢 * å½åç©ºé´æ ä¸è¾ä½ä½ç½®å¤çå®ä¹ä¼è¦çè¾é«ä½ç½®å¤çå®ä¹ * ç»§æ¿æ çæç´¢ä» ä» åçå¨è¯»å屿§å¼çæ¶åãå¨å屿§å¼æ¶ï¼æ§è¡çæ¯å±æ§çå®ä¹ï¼å½åå½å空é´ä¸è¯¥ååä¸åå¨ï¼æèµå¼ï¼å½åå½å空é´ä¸è¯¥ååå·²åå¨ï¼è¯ä¹ã ~~~mermaid graph BT; A(å®ä¾å½å空é´)-->B[ç±»å½å空é´]; B-->C[è¶ ç±»1å½å空é´]; B-->D[è¶ ç±»2å½å空é´]; style A fill:#f9f,stroke:#333; ~~~ 11.类对象ä¸å®ä¾å¯¹è±¡é½æ¯å åä¸ç临æ¶å¯¹è±¡ãå¯ä»¥éè¿å¯¹è±¡æä¹ 忥æä»ä»¬ä¿åå¨ç£çä¸ã * `pickle`模åï¼éç¨ç对象åºååä¸ååºååå·¥å ·ãå®å¯ä»¥å°ä»»ä½å¯¹è±¡è½¬æ¢ä¸ºåè串ï¼ä»¥åå°è¯¥åè串å¨å åä¸é建为æåç对象ã`pickle`å¸¸ç¨æ¥å£ä¸ºï¼ * åºååï¼ * `pickle.dump(obj, file, protocol=None, *, fix_imports=True) `: å°`obj`对象åºååå¹¶åå ¥`file`æä»¶å¯¹è±¡ä¸ * `pickle.dumps(obj, protocol=None, *, fix_imports=True)`ï¼å°`obj`对象åºååå¹¶è¿å对åºçåè串对象ï¼å¹¶ä¸åå ¥æä»¶ä¸ï¼ * ååºååï¼ * `pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict") `ï¼ä»`file`对象ä¸ä¿åçåè串ä¸è¯»ååºååæ°æ®ï¼ååºåå为对象 * `pickle.loads(bytes_object, *, fix_imports=True, encoding="ASCII", errors="strict")` ï¼ä»åè串ä¸è¯»ååºååæ°æ®ï¼ååºåå为对象  * `dbm`模åï¼ä¸ä¸ªå¯ä»¥éè¿é®è®¿é®çæä»¶ç³»ç».å®çé®ãå¼é½æ¯åè串æè å符串ãå®ä»¥ç±»ä¼¼åå ¸çæ¹å¼è®¿é®ï¼ä½æ¯é¦å è¦`open`ï¼ã  * `shelve`模åï¼ä»¥ä¸ä¸¤ä¸ªæ¨¡åæç §é®å°Python对象å/åå°ä¸ä¸ªæä»¶ä¸ã`shelve`模åæä¾äºä¸ä¸ªé¢å¤çç»æå±ãå 许æç §é®æ¥åå¨`pickle`å¤çåç对象 12.`shelve`模åç¨æ³ï¼å®ç¨`pickle`æå¯¹è±¡è½¬æ¢ä¸ºåè串ï¼å¹¶å°å ¶åå¨å¨ä¸ä¸ª`dbm`æä»¶çé®ä¹ä¸ï¼å®éè¿é®è·å`pickle`åçåè串ï¼å¹¶ç¨`pickle`å¨å åä¸éæ°å建æåç对象 * ä¸ä¸ª`shelve`ç`pickle`å对象çä¸å»å°±ååå ¸ã`shelve`èªå¨æåå ¸æä½æ å°å°åå¨|读å卿件ä¸ç对象 > ä¸ä¸ª`shelve`å常è§åå ¸ç¨æ³ä¸çå¯ä¸åºå«ï¼ >ä¸å¼å§å¿ é¡»æå¼`shelve`å¹¶ä¸å¨æåå ³éå®ãå¦å¤`shelve`䏿¯æ`SQL`æ¥è¯¢å·¥å · * ååè¯æ³ * åå¨çè¯æ³ï¼ ``` import shelve db=shelve.open('filename') #æå¼ for obj in objList: db[obj.name]=obj #åå ¥ db.close() #å ³é ``` * 读åçè¯æ³: ``` import shelve db=shelve.open('filename') #æå¼ for key in db:#ååå ¸ä¸æ ·è®¿é® print(key,'=>',db[key]) #读å db.close() #å ³é ``` * è½½å ¥é建åå¨ç对象æ¶ï¼ä¸å¿ `import`对象æå±ç±»ãå 为Python对ä¸ä¸ªå¯¹è±¡è¿è¡`pickle`æä½æ¶ï¼è®°å½äº`self`å®ä¾å±æ§ï¼ä»¥åå®ä¾æå±ç±»çåååç±»çä½ç½®ãå½`shelve`è·åå®ä¾å¯¹è±¡å¹¶å¯¹å ¶è¿è¡`unpickle`æ¶ï¼Pythonä¼èªå¨éæ°`import`该类ã * ä¼ç¼ºç¹ï¼ * 缺ç¹ï¼`pickle`ä½ç¨çç±»å¿ é¡»å¨ä¸ä¸ªæ¨¡åæä»¶é¡¶é¨ç¼ç ï¼ä¸è¯¥æ¨¡åæä»¶å¯éè¿`sys.path`æ¾å° * ä¼ç¹ï¼å½ç±»å®ä¾å¯¹è±¡å次é建æ¶ï¼å¯¹ç±»çæºä»£ç æä»¶çä¿®æ¹ä¼èªå¨éåã >è¿ä¸è¬åçå¨ä¸¤æ¬¡è¿è¡æ¶ãè¥ä» ä» å¨ä¸æ¬¡è¿è¡ä¸ï¼ååé¢å·²importï¼å次importæ ææ  13.ç±»å¯ä»¥æææ¡£åç¬¦ä¸²ãææ¡£å符串æ¯ä½äºåç§ç»æé¡¶é¨çå符串常éã * ææ¡£å符串å¨è¿è¡æ¶è½ä¿æ * å¯ä»¥éè¿`.__doc__`屿§è·å 