In class-based, object-oriented programming, a class variable is a variable defined in a class of which a single copy exists, regardless of how many instances of the class exist.
A class variable is not an instance variable. It is a special type of class attribute (or class property, field, or data member). The same dichotomy between instance and class members applies to methods ("member functions") as well; a class may have both instance methods and class methods.
Static member variables and static member functions
In some languages, class variables and class methods are either statically resolved, not via dynamic dispatch, or their memory statically allocated at compile time (once for the entire class, as static variables), not dynamically allocated at run time (at every instantiation of an object). In other cases, however, either or both of these are dynamic. For example, if classes can be dynamically defined (at run time), class variables of these classes are allocated dynamically when the class is defined, and in some languages class methods are also dispatched dynamically.
Thus in some languages, static member variable or static member function are used synonymously with or in place of "class variable" or "class function", but these are not synonymous across languages. These terms are commonly used in Java, C#,
<syntaxhighlight lang="cpp">
struct Color {
uint8_t r;
uint8_t g;
uint8_t b;
constexpr Color(uint8_t r, uint8_t g, uint8_t b) noexcept:
r{r}, g{g}, b{b} {}
constexpr ~Color() = default;
static const Color BLACK;
static const Color RED;
static const Color GREEN;
static const Color YELLOW;
static const Color BLUE;
static const Color MAGENTA;
static const Color CYAN;
static const Color WHITE;
};
inline constexpr Color Color::BLACK = Color(0, 0, 0);
inline constexpr Color Color::RED = Color(255, 0, 0);
inline constexpr Color Color::GREEN = Color(0, 255, 0);
inline constexpr Color Color::YELLOW = Color(255, 255, 0);
inline constexpr Color Color::BLUE = Color(0, 0, 255);
inline constexpr Color Color::MAGENTA = Color(255, 0, 255);
inline constexpr Color Color::CYAN = Color(0, 255, 255);
inline constexpr Color Color::WHITE = Color(255, 255, 255);
</syntaxhighlight>
Python
<syntaxhighlight lang="python">
class Dog:
vertebrate_group: str = "mammals" # class variable
dog: Dog = Dog()
print(dog.vertebrate_group) # accessing the class variable
</syntaxhighlight>
In the above Python code, it does not provide much information as there is only class variable in the <code>Dog</code> class that provide the vertebrate group of dog as mammals. In instance variable, one can customize the object (in this case, <code>dog</code>) by having one or more instance variables in the <code>Dog</code> class.
This can also be type hinted using .
<syntaxhighlight lang="python">
from typing import ClassVar
class Dog:
vertebrate_group: ClassVar[str] = "mammals"
</syntaxhighlight>
