热门问题
时间线
聊天
视角
类变量 (电脑科学)
来自维基百科,自由的百科全书
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