Variables de ClaseContinuando con las lecciones de Python orientado a objetos es el momento de ver variables de clases e instancia y los métodos de clase e instancia.
Como habíamos visto anteriormente los atributos y métodos definen las características del objeto y modifican su estado. Son datos que están asociados a ellas. De ellos se desprenden dos tipos de variables, de clase o de instancia (objeto).Antes de aprender esto me gustaría repasar lo siguiente:

  • Las clases agrupan objetos con propiedades y características en común, por ejemplo (Perros)
  • Instancia significa crear un objeto a partir de una clase.
  • Los atributos y métodos son elementos que almacenan datos (diferenciando los objetos dentro de la misma clase) utilizando variables de instancia.

Las variables de clase corresponden a una clase determinada y son accesibles sólo invocando la clase.(Ver mas abajo)

Las variables de instancia también a una clase determinada pero sólo es accesible mediante la instancia del objeto. (Ver mas abajo)

Y lo mismo sucede con los métodos!

Veamos con mas profundidad y ejemplifiquemos esto.

📦 Variables de clase

Las variables de clases o estáticas como dijimos mas arriba son definidas dentro de una clase, mas específicamente luego del encabezado. Pero nunca dentro de un método, porque eso la convertiría en una variable de instancia.

🖋️ Sintaxis de variables estáticas de clase

Veamos ahora cómo crear una variable de clase. Primeramente debemos crear una clase por supuesto!.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# pythones.net

class Perros (object):
    'Clase para los perros' #Descripcion
    Collar = True #Variable de clase Estática
    def __init__(self, salud, hambre):
        self.salud = salud #Variable de Instancia
        self.hambre = hambre #Variable de Instancia


# print (Perros.hambre) #-> No puedes acceder de esta manera porque hambre es una variable de instancia
#Debes instanciar:
Dogo = Perros(100, 50)
print(Dogo.hambre)

 

Puedes ver donde declaramos la variable de clase?. Justo después del encabezado de la clase y luego de la Descripción de clase. Si esto no lo sabías ahora lo sabes, es para organizarnos mejor. La creamos utilizando comillas simples!

En este caso la variable del tipo Booleano «collar» es igual a True. Determina que todos nuestros perros tienen collares.

Acceso

Ahora esta variable al ser de tipo clase, nos permite acceder a ella sin necesidad de instanciar (es decir, de crear un objeto perteneciente a esta clase). Por ende para acceder a ella basta con colocar la clase y el nombre de la variable:

print (Perros.Collar)

Resultado:

True

🗳️ Variables de instancia

Las variables de instancia son aquellas que se relacionan con una única instancia de una clase.

En el código anterior las variables de instancia son salud y hambre. Porque dependen exclusivamente de la instancia de clase. Es decir que para acceder a ellas debemos si o si instanciar: Crear un objeto de la clase Perros.

🖋️ Sintaxis de variables de instancia

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# pythones.net

class Perros (object):
    'Clase para los perros' #Descripcion
    Collar = True #Variable de clase Estática
    def __init__(self, salud, hambre):
        self.salud = salud #Variable de Instancia
        self.hambre = hambre #Variable de Instancia


# print (Perros.hambre) #-> No puedes acceder de esta manera porque hambre es una variable de instancia
#Debes instanciar:
Dogo = Perros(100, 50)
print(Dogo.hambre)

Resultado:

50

Lo mismo sucede con los métodos. Están los métodos de clase, estáticos y de instancia:

⚙️ Métodos de clase

Los métodos de clases son similares a las variables de clase y nos permite acceder a ellos sin instanciar un objeto. Pero para indicarle a python que un método es de clase debemos usar un decorador que nos permite modificar las funciones utilizando otra función para ampliar su funcionalidad. Estos decoradores los veremos en profundidad en la próxima lección, ahora nos enfocaremos en diferenciar los métodos.

🖋️ Sintaxis de los métodos de clase

Para indicarle a python que se trata de un método de clase debemos utilizar el decorador @classmethod

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# pythones.net

class Animal (object):
    @classmethod
    def correr(self, km):
        print ("El animal corre %s kilómetros" % km)                #Aquí estamos utilizando format
    'Clase para los animales corredores' #Descripción de esta clase


Animal.correr(12)

Resultado:

El animal corre 12 kilómetros

Como ves en el ejemplo no necesitamos instanciar ningún objeto para acceder a este método de la clase Animal. Solo llamamos el método mediante la clase, y brindamos los argumentos en este caso los km que corrió el animal 😛

🖋️ Sintaxis de los métodos de instancia

Los métodos de instancia son aquellos que utilizamos normalmente a los que no necesitamos añadir ningún decorador y que dependen estrictamente de que instanciemos para poder llamarlos. Observa:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# pythones.net

class Ave (object):
    'Clase para las aves' #Descripcion
    def __init__(self):
        pass
    
    def hablar (self, color):
        print ("Soy una jodida ave de color %s" %color) #Usamos format


#Ave.hablar ('verde') #-> No puedes acceder de esta manera porque es un método de instancia

#Debes instanciar (crear un objeto a partir de la clase)
Loro = Ave()
Loro.hablar('verde') #Ahora si invocamos al método de instancia

 

Resultado:

Soy una jodida ave de color verdevariables de clase

🖋️ Sintaxis de los métodos estáticos

Los métodos estáticos requieren del decorador @staticmethod para indicarle a python que se trata del mismo. Este tipo de método nos permite llamar una función elegantemente dentro de una clase sin que este ligada a la clase misma ni a la instancia. Veamos un ejemplo con el mismo código anterior.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# pythones.net

class Ave (object):
    'Clase para las aves' #Descripción
    def __init__(self):
        pass
    
    def hablar (self, color):
        print ("Soy una jodida ave de color %s" %color) #Usamos format
        
    @staticmethod        ### ######decorador staticmethod
    def funcion_volar_ave(tiene_alas, kms): #Definimos el metodo
        #####Condicional####################
        if tiene_alas == True:
            print ("El ave se fue volando %i kilometro" %kms)
        else:
            print ("Este ave no puede volar")


Ave.funcion_volar_ave(True, 1) #Llamamos el método (función) usando la clase

Resultado:

El ave se fue volando 1 kilometro

Si le pasamos el argumento False en vez de True imprimirá que no puede volar.

Comprender las variables y métodos de clase nos sera beneficioso cuando comencemos a crear nuestros primeros programas o aplicaciones orientados a objetos.

Espero te halla servido para comprender mejor las clases en python. No es difícil, pero lo que si es difícil es encontrarlo todo ordenado y ejemplificado de manera sencilla. No olvides compartir, recomendarle a algún amigo interesado en python o suscribirte a mi blog! Muchas gracias por leerme 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio