初學 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++ 跳槽,永世不再返......
沒有留言:
張貼留言