類別變數 (電腦科學)

在以類別為基礎、物件導向程式設計裡，類別變數（class variable）是定義在類別裡的變數，不論類別存在多少實例，同個類別的類別變數都是一個，不會因為實例數量而有多個變數

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

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

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

因此，在一些語言，靜態成員變數（static member variable）和靜態成員函式（static member function）就是類別變數和類別函式，但不是所有程式語言都是如此。上述的詞常用在Java、C#和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），在類別中增加一個或多個實例變數。

類別變數也可以透過來提示:
from typing import ClassVar

class Dog:
    vertebrate_group: ClassVar[str] = "mammals"

參考資料

Category:面向对象的程序设计
Category:变量
Category:带有C++代码示例的条目