En la programación orientada a objetos basada en clases , una variable de instancia es una variable definida en una clase (es decir, una variable miembro ), para la cual cada objeto instanciado de la clase tiene una copia separada, o instancia . [1] [2] Una variable de instancia tiene similitudes con una variable de clase , [3] pero no es estática . Una variable de instancia es una variable que se declara en una clase pero fuera de los constructores , métodos o bloques . Las variables de instancia se crean cuando se crea una instancia de un objeto y son accesibles para todos los constructores, métodos o bloques de la clase. Se pueden dar modificadores de acceso a la variable de instancia.
Una variable de instancia no es una variable de clase , [4] aunque existen similitudes. Ambos son un tipo de atributo de clase (o propiedad de clase, campo o miembro de datos). Si bien el valor de una variable de instancia puede diferir entre instancias de una clase, una variable de clase solo puede tener un valor a la vez, compartido entre todas las instancias. La misma dicotomía entre miembros de instancia y clase se aplica también a los métodos ("funciones miembro").
Cada variable de instancia vive en la memoria durante la vida útil del objeto que le pertenece. [5]
Las variables de instancia son propiedades de ese objeto. Todas las instancias de una clase tienen sus propias copias de variables de instancia, incluso si el valor es el mismo de un objeto a otro. Una instancia de clase puede cambiar los valores de sus variables de instancia sin afectar a todas las demás instancias. Una clase puede tener variables de instancia y variables de clase .
Las variables de instancia pueden ser utilizadas por todos los métodos de instancia de un objeto, pero no pueden ser utilizadas por los métodos de clase. Una variable de instancia también se puede cambiar directamente, siempre que se establezcan restricciones de acceso . [6]
Solicitud de estructura { recuento estático int1 ; // el nombre de la variable no es importante int número ; Solicitud () { número = recuento1 ; // modifica la variable de instancia "este->número" ++ count1 ; // modifica la variable de clase "Request::count1" } };int Solicitud :: cuenta1 = 0 ;
En este ejemplo de C++ , la variable de instancia Request::number
es una copia de la variable de clase Request::count1
donde a cada instancia construida se le asigna un valor secuencial de count1
antes de incrementarse . Como number
es una variable de instancia, cada Request
objeto contiene su propio valor distinto; por el contrario, sólo hay un objeto Request::count1
disponible para todas las instancias de clase con el mismo valor.
//Ejemplo.javaclase Ejemplo { public int x = 0 ; public void setX ( int newValue ) { this . x = nuevoValor ; } } //principal.javaclase Principal { public static void main ( String [] args ) { Ejemplo ejemplo1 = nuevo Ejemplo (); Ejemplo ejemplo2 = nuevo Ejemplo (); //Podemos establecer el valor de x por sí solo, ya que la variable es pública ejemplo1 . x = 10 ; afirmar ejemplo1 . x == 10 ; afirmar ejemplo2 . x == 0 ; //Como setX es un método de instancia, también puede acceder a la variable ejemplo2 . establecerX ( -10 ) ; afirmar ejemplo1 . x == 10 ; afirmar ejemplo2 . x == - 10 ; } }
En este ejemplo de Java , podemos ver cómo las variables de instancia se pueden modificar en una instancia sin afectar a otra.
clase Perro : def __init__ ( yo , raza ): yo . raza = raza # variable de instancia# dog_1 es un objeto # que también es una instancia de la clase Dog dog_1 = Dog ( "Border Collie" )
En el código Python anterior , la variable de instancia se crea cuando se analiza un argumento en la instancia, con la especificación del argumento posicional de raza.