Clases en Python 3
Clases en Python 3
¿Clase?
Podemos definir una clase vagamente como una Plantilla o
modelo para crear a partir de ella ciertos Objetos. Esta
plantilla es la que contiene la información; características y
capacidades que tendrá el objeto que sea creado a partir de
ella.
Así a su vez los objetos creados a partir de ella estarán
agrupados en esa misma clase.
Sintaxis de clases en
python y algunos
ejemplos
Para crear una clase recurrimos a la expresión class seguida del
nombre de la clase y entre paréntesis la clase de la
cual Hereda (una clase puede recibir atributos y métodos de
otra). Al momento de crear una clase si este parámetro entre
paréntesis no se declara; la clase automáticamente heredara
de Object (que es una clase predefinida osea existente en el propio
lenguaje por defecto.). Seguidamente colocamos dos puntos y debajo
(dentro del bloque de código) definimos el método constructor de
la clase seguido también de paréntesis para establecer
parámetros y luego colocamos dos puntos «:» teniendo así
dentro de la clase otro bloque de código.
Class Nombredelaclase (object): #Declaramos la clase
nuestra que hereda de Object
def __init__ (self, parámetros): #Constructor de la
clase
#Declaración de atributos
El método constructor de la clase en Python
(__init__)
Si hablamos de métodos de una clase puede existir diferentes
tipos de ellos. Pero el mas importante es el método
constructor; el cual dicho nombre hace referencia a inicializar
los atributos del objeto creado a partir de la clase que lo
posea. Por supuesto no es necesario que este método exista
dentro de una clase para que la clase exista. Pero si es
necesario para indicarle al interprete de Python que cuando
se Instancia un objeto a dicha clase debe asignarle los
argumentos que nosotros le damos al momento de la instancia.
(inicialización de atributos)
Este método se escribe «__init__» y yo para recordarlo lo
suelo asimilar con «inicializar». Una clase que posea este
método creara el objeto con los «argumentos» para los
atributos que se pasen al momento de la instancia.
El método __init__ NO RETORNA NINGÚN DATO Y ES
OPCIONAL. Cuando decimos que no retorna ningún dato
significa que a diferencia de otros métodos este no puede
retornar valores luego de ejecutado.
Este método es llamado automáticamente al
instanciar un objeto a la clase que tenga el
constructor por lo que su uso es muy común y
practico.
Objeto1 = Producto(«AZUL»)
Objeto2 = Producto(«ROJO»)
Objeto3 = Producto(«NEGRO»)
No necesitas especificar que el argumento «AZUL» por
ejemplo; corresponde al atributo color aunque tuvieras
más de un atributo el interprete se guía por el orden
(indice) en que le pasamos argumentos y declaramos
parámetros.
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 class Humano(): #Creamos la clase Humano
5 def __init__(self, edad, nombre): #Definimos el atributo edad y nombre
6 self.edad = edad # Definimos que el atributo edad, sera la edad asignada
7 self.nombre = nombre # Definimos que el atributo nombre, sera el nombre asig
8
9 Persona1 = Humano(31, "Pedro") #Instancia
Como puedes ver:
Añadiendo nuevos
métodos y atributos
a clases en python
En este caso vamos a jugar con la clase Humano. Donde
tendremos
tres atributos «Edad», «Nombre» y «Ocupación». Y me
gustaría que creáramos métodos que nos detallen el nombre,
edad y ocupación de cada objeto Persona.
Para este ejemplo usaremos el mismo código anterior. Así
no te pierdes; en el código anterior ya teníamos dos
atributos. Edad y Nombre; ahora vamos a agregar un
tercer atributo «Ocupacion» (sin acento), pero sabemos
que se refiere a su empleo, oficio, etc.
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 class Humano(): #Creamos la clase Humano
5 def __init__(self, edad, nombre): #Definimos el parámetro edad y nombre
6 self.edad = edad # Definimos que el atributo edad, sera la edad asignada
7 self.nombre = nombre # Definimos que el atributo nombre, sera el nombre asig
8
9 Persona1 = Humano(31, "Pedro") #Instancia
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 class Humano(): #Creamos la clase Humano
5 def __init__(self, edad, nombre, ocupacion): #Definimos el parámetro edad , nombre y ocupacion
6 self.edad = edad # Definimos que el atributo edad, sera la edad asignada
7 self.nombre = nombre # Definimos que el atributo nombre, sera el nombre asig
8 self.ocupacion = ocupacion #DEFINIMOS EL ATRIBUTO DE INSTANCIA OCUPACION
9
10 Persona1 = Humano(31, "Pedro", "Desocupado") #Instancia
Como ves inmediatamente también añadí el argumento
«Desocupado» en la instancia. Pues fíjate que se respeta el
orden de estos argumentos para cada parámetro definido en el
constructor de la clase. OJO a eso!
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 class Humano(): #Creamos la clase Humano
5 def __init__(self, edad, nombre, ocupacion): #Definimos el parametro edad , nombre y ocupacion
6 self.edad = edad # Definimos que el atributo edad, sera la edad asignada
7 self.nombre = nombre # Definimos que el atributo nombre, sera el nombre asig
8 self.ocupacion = ocupacion #DEFINIMOS EL ATRIBUTO DE INSTANCIA OCUPACION
9
10 #Creación de un nuevo método
11 def presentar(self):
12 presentacion = ("Hola soy {}, mi edad es {} y mi ocupación es {}") #Mensaje
13 print(presentacion.format(self.nombre, self.edad, self.ocupacion)) #Usamos FORMAT
14
15 Persona1 = Humano(31, "Pedro", "Desocupado") #Instancia
16
17 #Llamamos al método
18
19 Persona1.presentar()
Resultado:
Hola soy Pedro, mi edad es 31 y mi ocupación es
Desocupado
En este caso dentro de los parámetros del método
incluimos self para hacer referencia al objeto instanciado
aunque todavía no sepamos su nombre. Entonces
simplificamos su sintaxis siendo:
def NombredelMetodo (self, parámetros):
Declaraciones
Y para llamar el mismo
Objeto.NombredelMetodo(parámetros)
Cambiar atributos mediante métodos
Así de fácil aprendimos a crear y llamar métodos; estos
métodos también pueden modificar atributos fíjate el
siguiente ejemplo (creamos otro método para modificar el
atributo ocupación):
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 class Humano(): #Creamos la clase Humano
5 def __init__(self, edad, nombre, ocupacion): #Definimos el parametro edad , nombre y ocupacion
6 self.edad = edad # Definimos que el atributo edad, sera la edad asignada
7 self.nombre = nombre # Definimos que el atributo nombre, sera el nombre asig
8 self.ocupacion = ocupacion #DEFINIMOS EL ATRIBUTO DE INSTANCIA OCUPACION
9
10 #Creación de un nuevo método
11 def presentar(self):
12 presentacion = ("Hola soy {}, mi edad es {} y mi ocupación es {}") #Mensaje
13 print(presentacion.format(self.nombre, self.edad, self.ocupacion)) #Usamos FORMAT
14
15
16 #Creamos un nuevo metodo para cambiar la ocupación:
17 #En caso que esta persona sea contratada
18
19 def contratar(self, puesto): #añadimos un nuevo parametro en el método
20 self.puesto = puesto
21 print ("{} ha sido contratado como {}".format(self.nombre, self.puesto))
22 self.ocupacion = puesto #Ahora cambiamos el atributo ocupación
23 Persona1 = Humano(31, "Pedro", "Desocupado") #Instancia
24
25 #Llamamos al método
26
27 Persona1.presentar()
28 Persona1.contratar("Obrero")
29 Persona1.presentar() #Lo volvemos a presentar luego de su contratación
Esta practica es ideal. Lo más practico es crear métodos para
modificar los atributos de nuestros objetos. En python lo
veremos más adelante pero siempre deben crearse las
variables de atributos como privadas y ser modificadas
mediante métodos públicos. De esta forma se conserva
el principio de encapsulamiento. Tenerlo en cuenta; aunque
aún no lo hallas aprendido que conviene crear métodos para
cada cambio a realizar en los atributos.
Self en Python
Seguramente te habrás dado cuenta y lo habré
mencionado antes. Self no es en realidad una palabra
reservada del lenguaje. Esta hace referencia al objeto
en instancia pero no obligadamente tiene que tener ese
nombre. Es como «This» en java. Pero en Python
podemos usar cualquier nombre en vez de Self; aunque
es buena practica simplemente usar self para no
descolocarse.