为什么Python必须在方法定义和调用中显示使用“self”?这个想法借鉴了 Modula-3 语言。出于多种原因它被证明是非常有用的。首先,更明显
为ä»ä¹Pythonå¿ é¡»å¨æ¹æ³å®ä¹åè°ç¨ä¸æ¾ç¤ºä½¿ç¨âselfâï¼
è¿ä¸ªæ³æ³åé´äº Modula-3 è¯è¨ãåºäºå¤ç§åå å®è¢«è¯ææ¯é常æç¨çã
é¦å ï¼æ´ææ¾çæ¾ç¤ºåºï¼ä½¿ç¨çæ¯æ¹æ³æå®ä¾å±æ§èä¸æ¯å±é¨åéã
é 读 self.x æ self.meth() å¯ä»¥æ¸ æ¥å°è¡¨æï¼å³ä½¿æ¨ä¸ç¥éç±»çå®ä¹ï¼ä¹ä¼ä½¿ç¨å®ä¾åéææ¹æ³ã
å¨ C++ ä¸ï¼å¯ä»¥éè¿ç¼ºå°å±é¨åé声ææ¥å¤æï¼åè®¾å ¨å±åéå¾å°è§æ容æè¯å«ï¼ ââ ä½æ¯å¨ Python ä¸æ²¡æå±é¨åé声æï¼æä»¥å¿ é¡»æ¥æ¾ç±»å®ä¹æè½ç¡®å®ã
ä¸äº C++ å Java ç¼ç æ åè¦æ±å®ä¾å±æ§å ·æ m_ åç¼ï¼å æ¤è¿ç§æ¾å¼æ§å¨è¿äºè¯è¨ä¸ä»ç¶æç¨ã
å ¶æ¬¡ï¼è¿æå³çå¦æè¦æ¾å¼å¼ç¨æä»ç¹å®ç±»è°ç¨è¯¥æ¹æ³ï¼ä¸éè¦ç¹æ®è¯æ³ã
å¨ C++ ä¸ï¼å¦æä½ æ³ä½¿ç¨å¨æ´¾çç±»ä¸éååºç±»ä¸çæ¹æ³ï¼ä½ å¿ é¡»ä½¿ç¨ :: è¿ç®ç¬¦ -- å¨ Python ä¸ä½ å¯ä»¥ç¼å baseclass.methodname(self, <argumentlist>)ã
è¿å¯¹äº __init__() æ¹æ³é常æç¨ï¼ç¹å«æ¯å¨æ´¾çç±»æ¹æ³æ³è¦æ©å±ååçåºç±»æ¹æ³ï¼èå¿ é¡»ä»¥æç§æ¹å¼è°ç¨åºç±»æ¹æ³æ¶ã
æåï¼å®è§£å³äºåéèµå¼çè¯æ³é®é¢ï¼
ä¸ºäº Python ä¸çå±é¨åéï¼æ ¹æ®å®ä¹ï¼ï¼å¨å½æ°ä½ä¸èµå¼çé£äºåéï¼å¹¶ä¸æ²¡ææ确声æä¸ºå ¨å±ï¼èµå¼ï¼å°±å¿ 须以æç§æ¹å¼åè¯è§£éå¨ä¸ä¸ªèµå¼æ¯ä¸ºäºåé ä¸ä¸ªå®ä¾åéèä¸æ¯ä¸ä¸ªå±é¨åéï¼å®æ好æ¯éè¿è¯æ³å®ç°çï¼åºäºæçåå ï¼ã
C++ éè¿å£°ææ¥åå°è¿ä¸ç¹ï¼ä½æ¯ Python 没æ声æï¼ä» ä» ä¸ºäºè¿ä¸ªç®çèå¼å ¥å®ä»¬ä¼å¾å¯æã
使ç¨æ¾å¼ç self.var å¾å¥½å°è§£å³äºè¿ä¸ªé®é¢ã类似å°ï¼å¯¹äºä½¿ç¨å®ä¾åéï¼å¿ é¡»ç¼å self.var æå³ç对æ¹æ³å é¨çééå®å称çå¼ç¨ä¸å¿ æç´¢å®ä¾çç®å½ã
æ¢å¥è¯è¯´ï¼å±é¨åéåå®ä¾åéåå¨äºä¸¤ä¸ªä¸åçå½å空é´ä¸ï¼æ¨éè¦åè¯ Python 使ç¨åªä¸ªå½å空é´ã
æ´å¤Pythoné®çç¥è¯ï¼è¯·å ³æ³¨Pythonè§é¢æç¨ï¼ï¼