热门问题
时间线
聊天
视角
類變量 (電腦科學)
来自维基百科,自由的百科全书
Remove ads
在以類別為基礎、物件導向程式設計裏,類變量(class variable)是定義在類別裏的變量,不論類別存在多少實例,同個類別的類變量都是一個,不會因為實例數量而有多個變量[1][2][3][4][5]
類變量不是實例變量(instance variable),是一種特別的類別屬性(或是類別屬性、資料成員)。「類別」和「實例」的差異也可以用在方法(成員函數)上,類別可以有實例方法(instance method),也可以有類別方法。
靜態成員變量和靜態成員函數
有些程式語言中,類變量和類別方式可能是靜態解析(statically resolved),不是用動態分派方式調用,也有可能是在編譯時組態其記憶體(整個類別只組態一次,如同靜態變量一樣)。而有些語言中,可能上述方式中的一種或全部改為動態方式。例如,若可以在運行時動態定義類別,其成員變量也會在類別定義時動態組態記憶體,另外在一些語言中的類別方法會用動態分派來處理。
因此,在一些語言,靜態成員變量(static member variable)和靜態成員函數(static member function)就是類變量和類別函數,但不是所有程式語言都是如此。上述的詞常用在Java、C#[5]和C++,其中類變量和類別方法會用static關鍵字宣告,稱為靜態成員變量和靜態成員函數。
範例
struct Request {
static int count;
int number;
Requestobject() {
number = count; // 修改實例變數 "this->number"
++count; // 修改類別變數 "Request::count"
}
};
int Request::count = 0;
在上述C++範例中,每一次呼叫構造器,類變量Request::count就會加一,因此Request::count可以記錄請求創建的數量,每一個新請求的物件會循序給予number,數值不會重複。因為count是類變量,只有一個Request::count物件,相對的,每一個請求的物件都有其自己的number變量。
另外,Request::count只會初始化一次。
class Dog:
vertebrate_group = "mammals" # 類別變數
dog_1 = Dog
print(dog_1.vertebrate_group) # 存取類別變數
上述程式碼的資訊不多,因為在Dog類別中只有一個類變量,將狗歸類為哺乳動物I。有關類變量中,可以客制化物件(在此例中,是dog_1),在類別中增加一個或多個實例變量。
類變量也可以透過ClassVar來提示:
from typing import ClassVar
class Dog:
vertebrate_group: ClassVar[str] = "mammals"
參考資料
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads