Module (19%)
Section (20%)

Variables de instancia

En general, una clase puede equiparse con dos tipos diferentes de datos para formar las propiedades de una clase. Ya viste uno de ellos cuando estábamos estudiando pilas.

Este tipo de propiedad existe solo cuando se crea explícitamente y se agrega a un objeto. Como ya sabes, esto se puede hacer durante la inicialización del objeto, realizada por el constructor.

Además, se puede hacer en cualquier momento de la vida del objeto. Es importante mencionar también que cualquier propiedad existente se puede eliminar en cualquier momento.

Tal enfoque tiene algunas consecuencias importantes:

  • Diferentes objetos de la misma clase pueden poseer diferentes conjuntos de propiedades.
  • Debe haber una manera de verificar con seguridad si un objeto específico posee la propiedad que deseas utilizar (a menos que quieras provocar una excepción, siempre vale la pena considerarlo).
  • Cada objeto lleva su propio conjunto de propiedades - no interfieren entre sí de ninguna manera.

Tales variables (propiedades) se llaman variables de instancia.

La palabra instancia sugiere que están estrechamente conectadas a los objetos (que son instancias de clase), no a las clases mismas. Echemos un vistazo más de cerca a ellas.

Aquí hay un ejemplo:

class ClaseEjemplo: def __init__(self, val = 1): self.primera = val def setSegunda(self, val): self.segunda = val objetoEjemplo1 = ClaseEjemplo() objetoEjemplo2 = ClaseEjemplo(2) objetoEjemplo2.setSegunda(3) objetoEjemplo3 = ClaseEjemplo(4) objetoEjemplo3.tercera = 5 print(objetoEjemplo1.__dict__) print(objetoEjemplo2.__dict__) print(objetoEjemplo3.__dict__)


Se necesita una explicación adicional antes de entrar en más detalles. Echa un vistazo a las últimas tres líneas del código.

Los objetos de Python, cuando se crean, están dotados de un pequeño conjunto de propiedades y métodos predefinidos. Cada objeto los tiene, los quieras o no. Uno de ellos es una variable llamada __dict__ (es un diccionario).

La variable contiene los nombres y valores de todas las propiedades (variables) que el objeto contiene actualmente. Vamos a usarla para presentar de forma segura el contenido de un objeto.

Vamos a sumergirnos en el código ahora:

  • La clase llamada ClaseEjemplo tiene un constructor, el cual crea incondicionalmente una variable de instancia llamada primera, y le asigna el valor pasado a través del primer argumento (desde la perspectiva del usuario de la clase) o el segundo argumento (desde la perspectiva del constructor); ten en cuenta el valor predeterminado del parámetro: cualquier cosa que puedas hacer con un parámetro de función regular también se puede aplicar a los métodos.

  • La clase también tiene un método que crea otra variable de instancia, llamada segunda.

  • Hemos creado tres objetos de la clase ClaseEjemplo, pero todas estas instancias difieren:

    • objetoEjemplo1 solo tiene una propiedad llamada primera.

    • objetoEjemplo2 tiene dos propiedades: primera y segunda.

    • objetoEjemplo3 ha sido enriquecido sobre la marcha con una propiedad llamada tercera, fuera del código de la clase: esto es posible y totalmente permisible.

La salida del programa muestra claramente que nuestras suposiciones son correctas: aquí están:

{'primera': 1} {'primera': 2, 'segunda': 3} {'primera': 4, 'tercera': 5}

Hay una conclusión adicional que debería mencionarse aquí: el modificar una variable de instancia de cualquier objeto no tiene impacto en todos los objetos restantes. Las variables de instancia están perfectamente aisladas unas de otras.