logo

Clase o variables estáticas en Python

Todos los objetos comparten clase o variables estáticas. Una instancia o variables no estáticas son diferentes para diferentes objetos (cada objeto tiene una copia). Por ejemplo, supongamos que un estudiante de informática esté representado por una clase. CSSestudiante . La clase puede tener una variable estática cuyo valor es cse para todos los objetos. Y la clase también puede tener miembros no estáticos como nombre y rollo .

En C++ y Java, podemos usar palabras clave estáticas para convertir una variable en una variable de clase. Las variables que no tienen una palabra clave estática precedente son variables de instancia. Vea esto para el ejemplo de Java y esto para el ejemplo de C++.

Explicación:

En Python, una variable estática es una variable que se comparte entre todas las instancias de una clase, en lugar de ser única para cada instancia. A veces también se la denomina variable de clase, porque pertenece a la clase misma y no a cualquier instancia particular de la clase.



Las variables estáticas se definen dentro de la definición de clase, pero fuera de cualquier definición de método. Por lo general, se inicializan con un valor, al igual que una variable de instancia, pero se puede acceder a ellas y modificarlas a través de la clase misma, en lugar de a través de una instancia.

Características de las variables estáticas

  • A las variables estáticas se les asigna memoria una vez cuando se crea el objeto de la clase por primera vez.
  • Las variables estáticas se crean fuera de los métodos pero dentro de una clase.
  • Se puede acceder a las variables estáticas a través de una clase, pero no directamente con una instancia.
  • El comportamiento de las variables estáticas no cambia para todos los objetos.

El enfoque de Python es simple; no requiere una palabra clave estática.

Nota: Todas las variables a las que se les asigna un valor en el La declaración de clase son variables de clase. y variables eso se les asignan valores dentro de los métodos y son variables de instancia.

seleccione SQL de varias tablas

Ejemplo:

Pitón




# Python program to show that the variables with a value> # assigned in class declaration, are class variables> # Class for Computer Science Student> class> CSStudent:> >stream>=> 'cse'> # Class Variable> >def> __init__(>self>,name,roll):> >self>.name>=> name># Instance Variable> >self>.roll>=> roll># Instance Variable> # Objects of CSStudent class> a>=> CSStudent(>'Geek'>,>1>)> b>=> CSStudent(>'Nerd'>,>2>)> print>(a.stream)># prints 'cse'> print>(b.stream)># prints 'cse'> print>(a.name)># prints 'Geek'> print>(b.name)># prints 'Nerd'> print>(a.roll)># prints '1'> print>(b.roll)># prints '2'> # Class variables can be accessed using class> # name also> print>(CSStudent.stream)># prints 'cse'> # Now if we change the stream for just a it won't be changed for b> a.stream>=> 'ece'> print>(a.stream)># prints 'ece'> print>(b.stream)># prints 'cse'> # To change the stream for all instances of the class we can change it> # directly from the class> CSStudent.stream>=> 'mech'> print>(a.stream)># prints 'ece'> print>(b.stream)># prints 'mech'>

>

>

Producción

cse cse Geek Nerd 1 2 cse ece cse ece mech>

Producción:

cse cse Geek Nerd 1 2 cse ece cse ece mech>

Ejemplo:

Pitón




class> MyClass:> >static_var>=> 0> >def> __init__(>self>):> >MyClass.static_var>+>=> 1> >self>.instance_var>=> MyClass.static_var> obj1>=> MyClass()> print>(obj1.instance_var)># Output: 1> obj2>=> MyClass()> print>(obj2.instance_var)># Output: 2> print>(MyClass.static_var)># Output: 2>

>

>

Producción

1 2 2>

Explicación:

En este ejemplo, definimos una clase MiClase que tiene una variable estática static_var inicializada a 0. También definimos una variable de instancia var_instancia que es única para cada instancia de la clase.

Cuando creamos una instancia de la clase (obj1), incrementamos el valor de la variable estática en 1 y lo asignamos a la variable de instancia. Cuando creamos otra instancia de la clase (obj2), incrementamos la variable estática nuevamente y asignamos el nuevo valor a la variable de instancia para esa instancia.

Finalmente, imprimimos el valor de la variable estática usando la clase misma, en lugar de una instancia de la clase. Como puede ver, el valor de la variable estática se comparte entre todas las instancias de la clase y se incrementa cada vez que se crea una nueva instancia.

Las variables estáticas pueden resultar útiles para mantener el estado en todas las instancias de una clase o para compartir datos entre todas las instancias de una clase. Sin embargo, es importante utilizarlos con cuidado y asegurarse de que sus valores estén sincronizados con el estado del programa, especialmente en un entorno multiproceso.

Ventajas:

    Eficiencia de la memoria: dado que las variables estáticas se comparten entre todas las instancias de una clase, pueden ahorrar memoria al evitar la necesidad de crear múltiples copias de los mismos datos. Estado compartido: las variables estáticas pueden proporcionar una forma de mantener el estado compartido en todas las instancias de una clase, permitiendo que todas las instancias accedan y modifiquen los mismos datos. Fácil acceso: se puede acceder a las variables estáticas utilizando el nombre de la clase, sin necesidad de una instancia de la clase. Esto puede hacer que sea más conveniente acceder y modificar los datos almacenados en una variable estática. Inicialización: las variables estáticas se pueden inicializar cuando se define la clase, lo que facilita garantizar que la variable tenga un valor inicial válido. Legibilidad: las variables estáticas pueden mejorar la legibilidad del código, ya que indican claramente que los datos almacenados en la variable se comparten entre todas las instancias de la clase.

Desventajas:

    Inflexibilidad: las variables estáticas pueden ser inflexibles, ya que sus valores se comparten en todas las instancias de la clase, lo que dificulta tener diferentes valores para diferentes instancias. Dependencias ocultas: las variables estáticas pueden crear dependencias ocultas entre diferentes partes del código, lo que dificulta la comprensión y modificación del código. Seguridad de subprocesos: las variables estáticas pueden ser problemáticas en un entorno multiproceso, ya que pueden introducir condiciones de carrera y problemas de sincronización si no se sincronizan correctamente. Contaminación del espacio de nombres: las variables estáticas pueden agregarse al espacio de nombres de la clase, lo que podría causar conflictos de nombres y dificultar el mantenimiento del código. Pruebas: las variables estáticas pueden dificultar la escritura de pruebas unitarias efectivas, ya que el estado de la variable estática puede afectar el comportamiento de la clase y sus métodos.

En general, las variables estáticas pueden ser una herramienta útil en la programación de Python, pero deben usarse con cuidado y atención a posibles desventajas, como inflexibilidad, dependencias ocultas y problemas de seguridad de subprocesos.