2009年10月31日 星期六

(轉載)Python 的 self

以下是一篇轉載文,偶然在網上找來的。它解決了我幾天來對 self 的疑惑。


原文:Python 的 self


初學 Python,有個令我很頭大的地方是 self 對 class variable 的修飾。要加不加 self,傻傻分不清楚......。原先習慣了 C++ 中的 variable scope,換個語言就躺平瞭。所幸有股溝的協助,把股來的結果整理一下;依我目前為止的理解,下面是 C++ 和 Python 2.5 等價的程式碼:

   C++

   int globalVar = 5;

   class Class
   {
   public:
     Class() { attribute = 30; }
     void func() {
       int localVar = 20;
       localVar = attribute;
     }

   int attribute;
   static int staticVar;
   };

   int Class::staticVar = 10;

   Python

   globalVar = 5

   class Class:
     staticVar = 10
     def __init__(self):
       self.attribute = 30
     def func(self):
       localVar = 20
       localVar = self.attribute

   Class.staticVar = 10

總之,變數若加了 self,就成了 instance 的 attribute,可以在同一個 instance 內跨 method 存取。如果沒加的話,就被限制在定義時的 scope 裡。

至於 member function 的 self argument,和 C++ 的 this 一樣,是用來區別呼叫的 instatnce 的。

寫了一天的 Python,有股衝動想從 C/C++ 跳槽,永世不再返......


********** 2009-11-04 12:50 補充 **********

參考了《電腦做什麼事》的例子,self 的用法更明白。



  
  
   

沒有留言: