2008年10月25日

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++ 跳槽,永世不再返......

沒有留言:

張貼留言