热门问题
时间线
聊天
视角

类变量 (电脑科学)

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

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