热门问题
时间线
聊天
视角

類變量 (電腦科學)

来自维基百科,自由的百科全书

Remove ads

以類別為基礎物件導向程式設計裏,類變量(class variable)是定義在類別裏的變量,不論類別存在多少實例,同個類別的類變量都是一個,不會因為實例數量而有多個變量[1][2][3][4][5]

類變量不是實例變量(instance variable),是一種特別的類別屬性(或是類別屬性、資料成員)。「類別」和「實例」的差異也可以用在方法(成員函數)上,類別可以有實例方法(instance method),也可以有類別方法。

靜態成員變量和靜態成員函數

有些程式語言中,類變量和類別方式可能是靜態解析(statically resolved),不是用動態分派方式調用,也有可能是在編譯時組態其記憶體(整個類別只組態一次,如同靜態變量一樣)。而有些語言中,可能上述方式中的一種或全部改為動態方式。例如,若可以在運行時動態定義類別,其成員變量也會在類別定義時動態組態記憶體,另外在一些語言中的類別方法會用動態分派來處理。

因此,在一些語言,靜態成員變量(static member variable)和靜態成員函數(static member function)就是類變量和類別函數,但不是所有程式語言都是如此。上述的詞常用在JavaC#[5]C++,其中類變量和類別方法會用static關鍵字宣告,稱為靜態成員變量和靜態成員函數。

範例

C++

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只會初始化一次。

Python

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"

參考資料

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads