В объектно - ориентированном программировании на основе классов переменная класса — это переменная , определенная в классе , единственная копия которой существует независимо от того, сколько экземпляров класса существует. [1] [2] [3] [4] [5]
Переменная класса не является переменной экземпляра . Это особый тип атрибута класса (или свойства класса, поля или элемента данных). Та же дихотомия между членами экземпляра и класса применима и к методам («функциям-членам»); класс может иметь как методы экземпляра , так и методы класса .
В некоторых языках переменные класса и методы класса либо разрешаются статически, а не посредством динамической диспетчеризации , либо их память статически выделяется во время компиляции (один раз для всего класса, как статические переменные ), а не выделяется динамически во время выполнения (при каждой реализации объект). Однако в других случаях один из них или оба являются динамическими. Например, если классы могут быть определены динамически (во время выполнения), переменные класса этих классов выделяются динамически при определении класса, а в некоторых языках методы класса также отправляются динамически.
Таким образом, в некоторых языках статическая переменная-член или статическая функция-член используются как синонимы или вместо «переменной класса» или «функции класса», но они не являются синонимами во всех языках. Эти термины обычно используются в Java , C# , [5] и C++ , где переменные класса и методы класса объявляются с помощью static
ключевого слова и называются статическими переменными-членами или статическими функциями-членами .
структура Запрос { статический счетчик целых чисел ; целое число ; Объект запроса () { число = количество ; // изменяет переменную экземпляра "this->number" ++ количество ; // изменяет переменную класса "Request::count" }};int Request :: count = 0 ;
В этом примере C++ переменная класса Request::count
увеличивается при каждом вызове конструктора , поэтому она всегда содержит количество созданных запросов, а каждому новому объекту запроса присваивается значение в последовательном порядке. Поскольку это переменная класса, существует только один объект ; напротив, каждый объект Request содержит свое собственное поле.Request::count
number
count
Request::count
number
Также обратите внимание, что переменная Request::count
инициализируется только один раз.
class Dog : позвоночные_группа = 'млекопитающие' # переменная классаDog_1 = Dog print ( dog_1.позвоночная_группа ) # доступ к переменной класса
В приведенном выше коде Python он не предоставляет много информации, поскольку в классе Dog есть только переменная класса, которая определяет группу позвоночных собак как млекопитающих. В переменной экземпляра вы можете настроить свой собственный объект (в данном случае Dog_1), имея одну или несколько переменных экземпляра в классе Dog.