Class variable: Difference between revisions

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
imported>Zaelzo
m change title of section with examples from singular to plural since there are multiple examples
 
imported>Frap
Add text
 
Line 1: Line 1:
{{short description|Variable defined in a class whose objects all possess the same copy}}
{{short description|Variable defined in a class whose objects all possess the same copy}}
 
{{Portal|Computer programming}}
In [[class-based]], [[object-oriented programming]], a '''class variable'''  is a [[Variable (programming)|variable]] defined in a [[Class (computer programming)|class]] of which a single copy exists, regardless of how many [[Instance (computer science)|instance]]s of the class exist.<ref name=TheJavaTurotialVariables>{{cite web|url=http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html|title=The Java Tutorial, Variables |accessdate=2010-10-21}}</ref><ref name=TheJavaTutorialUnderstandingInstanceAndClassMembers>{{cite web|url=http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html|title=The Java Tutorial, Understanding Instance and Class Members|accessdate=2010-10-21}}</ref><ref name=ThePythonLanguageReferenceCompoundStatements>{{cite web|url=https://docs.python.org/reference/compound_stmts.html#class-definitions|title=The Python Language Reference, Compound Statements|accessdate=2010-10-21}}</ref><ref name=ObjectiveCRuntimeReference>{{cite web|url=https://developer.apple.com/documentation/objectivec/objective_c_runtime|title= Objective-C Runtime Reference |website=Apple Developer|accessdate=1 April 2018}}</ref><ref name=ClassVariablesinCSharp>{{cite web|title=Class Variables in C#|url=https://syntaxdb.com/ref/csharp/class-var|website=Syntaxdb|accessdate=1 April 2018}}</ref>
In [[class-based]], [[object-oriented programming]], a '''class variable'''  is a [[Variable (programming)|variable]] defined in a [[Class (programming)|class]] of which a single copy exists, regardless of how many [[Instance (computer science)|instance]]s of the class exist.<ref name=TheJavaTurotialVariables>{{cite web|url=http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html|title=The Java Tutorial, Variables |accessdate=2010-10-21}}</ref><ref name=TheJavaTutorialUnderstandingInstanceAndClassMembers>{{cite web|url=http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html|title=The Java Tutorial, Understanding Instance and Class Members|accessdate=2010-10-21}}</ref><ref name=ThePythonLanguageReferenceCompoundStatements>{{cite web|url=https://docs.python.org/reference/compound_stmts.html#class-definitions|title=The Python Language Reference, Compound Statements|accessdate=2010-10-21}}</ref><ref name=ObjectiveCRuntimeReference>{{cite web|url=https://developer.apple.com/documentation/objectivec/objective_c_runtime|title= Objective-C Runtime Reference |website=Apple Developer|accessdate=1 April 2018}}</ref><ref name=ClassVariablesinCSharp>{{cite web|title=Class Variables in C#|url=https://syntaxdb.com/ref/csharp/class-var|website=Syntaxdb|accessdate=1 April 2018}}</ref>


A class variable is not an [[instance variable]]. It is a special type of [[Class (computer science)#Structure|class attribute]] (or class property, [[Field (computer science)|field]], or data member). The same dichotomy between ''instance'' and ''class'' members applies to [[method (computer science)|method]]s ("member functions") as well; a class may have both [[instance method]]s and [[class method]]s.
A class variable is not an [[instance variable]]. It is a special type of [[Class (computer science)#Structure|class attribute]] (or class property, [[Field (computer science)|field]], or data member). The same dichotomy between ''instance'' and ''class'' members applies to [[method (computer science)|method]]s ("member functions") as well; a class may have both [[instance method]]s and [[class method]]s.
Line 37: Line 37:
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
class Dog:
class Dog:
     vertebrate_group = 'mammals' # class variable
     vertebrate_group = "mammals"  # class variable


dog_1 = Dog
dog_1 = Dog
print(dog_1.vertebrate_group) # accessing the class variable
print(dog_1.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 Dog class that provide the vertebrate group of dog as mammals. In instance variable, you could customize your own object (in this case, dog_1) by having one or more [[instance variable]]s in the Dog class.
</syntaxhighlight>
In the above Python code, it does not provide much information as there is only class variable in the Dog class that provide the vertebrate group of dog as mammals. In instance variable, you could customize your own object (in this case, dog_1) by having one or more [[instance variable]]s in the Dog class.
 
This can also be type hinted using {{Code|ClassVar}}.
<syntaxhighlight lang="python">
from typing import ClassVar
 
class Dog:
    vertebrate_group: ClassVar[str] = "mammals"
</syntaxhighlight>


==Notes==
==Notes==

Latest revision as of 00:13, 2 November 2025

Template:Short description Script error: No such module "Portal". 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.[1][2][3][4][5]

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

Script error: No such module "Labelled list hatnote". 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#,[5] and C++, where class variables and class methods are declared with the static keyword, and referred to as static member variables or static member functions.

Examples

C++

struct Request {

    static int count;
    int number;

    Requestobject() {
        number = count; // modifies the instance variable "this->number"
        ++count; // modifies the class variable "Request::count"
    }

};

int Request::count = 0;

In this C++ example, the class variable Request::count is incremented on each call to the constructor, so that Request::count always holds the number of Requests that have been constructed, and each new Request object is given a number in sequential order. Since count is a class variable, there is only one object Request::count; in contrast, each Request object contains its own distinct number field.

Also note that the variable Request::count is initialized only once.

Python

class Dog:
    vertebrate_group = "mammals"  # class variable

dog_1 = Dog
print(dog_1.vertebrate_group)  # accessing the class variable

In the above Python code, it does not provide much information as there is only class variable in the Dog class that provide the vertebrate group of dog as mammals. In instance variable, you could customize your own object (in this case, dog_1) by having one or more instance variables in the Dog class.

This can also be type hinted using ClassVar.

from typing import ClassVar

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

Notes

<templatestyles src="Reflist/styles.css" />

  1. ↑ Script error: No such module "citation/CS1".
  2. ↑ Script error: No such module "citation/CS1".
  3. ↑ Script error: No such module "citation/CS1".
  4. ↑ Script error: No such module "citation/CS1".
  5. ↑ a b Script error: No such module "citation/CS1".

Script error: No such module "Check for unknown parameters".