Python,當實例對象調用函數(函數其實都是屬於類空間的)的時候,系統會自動將對象本身傳入 函數在定義時的第一個變量一般是self。(但self並不是關鍵字,用其他名字也可以) 定義時,這個self必須寫出來,而調用時,不用你自己將實例對象傳入。
C++,當實例對象調用函數時,系統也會將實例對象傳入函數,不同是不管是定義還是調用,存儲對象的這個 參數都是隱藏的,傳遞過程也是自動且不可見的。只有在函數內部才可以顯性的使用它——this。而且this是一個關鍵字。
也就是說C++類里定義的函數默認都是給實例用的,除非加上static關鍵字!此時才是給類用的。(不過實例也可以調用靜態函數,但是類無法調用非靜態函數)。
而python並沒有強制說哪個函數是給類用的,哪些函數是給實例對象用的,他只是規定,如果是類調用函數 那么就是普通的調用,如果是實例對象調用函數,系統就會自動把實例對象傳給函數定義時的第一個參數。如:
class Stack: def test(x): print(x) s = Stack() Stack.test(123) ##類調用test函數 s.test() ##實例對象調用test函數,此時test不能再傳參了,不然會提示你多傳了參數。 這個例子打印結果為: 123 <__main__.Stack object at 0x01F6FE50> ##這是s這個實例對象
這也是,為什么可以不用self的原因。