
- 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 verde
🖋️ 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 🙂