0% encontró este documento útil (0 votos)
187 vistas

Clases en Python 3

El documento explica los conceptos básicos de las clases en Python. 1) Una clase es una plantilla que define los atributos y métodos comunes para los objetos que se crean a partir de ella. 2) Los objetos son instancias de una clase que almacenan información como atributos y pueden realizar acciones a través de métodos. 3) El método constructor __init__() se usa para inicializar los atributos de un objeto cuando este es creado.

Cargado por

Jorge Quiroz
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
187 vistas

Clases en Python 3

El documento explica los conceptos básicos de las clases en Python. 1) Una clase es una plantilla que define los atributos y métodos comunes para los objetos que se crean a partir de ella. 2) Los objetos son instancias de una clase que almacenan información como atributos y pueden realizar acciones a través de métodos. 3) El método constructor __init__() se usa para inicializar los atributos de un objeto cuando este es creado.

Cargado por

Jorge Quiroz
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 14

Clases en Python 3

Para aprender a crear clases en Python 3 primero tenemos que


aprender ¿Qué es una clase?. Debemos aprender a pensar en
términos de programacion orientada a objetos que es algo
diferente a la programación estructurada con la que se aprende
a programar en Python.

¿Qué es una clase en Python?


Aquí es donde se suelen perder muchos novatos de la
programación; donde tienen errores de conceptos y les cuesta
entender al 100% de que se habla cuando se mencionan clases;
objetos; instancias. Pero venga!. Tratare de explicarlo lo mas
sencillo posible!

¿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.

Imagina que tienes una regla


de esas con moldes para crear figuras geométricas perfectas.
Pues algo así seria una clase; tu puedes crear esa regla y definir
en ella las características de cada figura que seria un objeto.
Crear un objeto a partir de una clase se
denomina instanciar.

¿Qué es un Objeto en Python?


Es muy sencillo; cuando pensamos en objetos pensamos en
entidades que tienen
un comportamiento; un estado; almacenan información y
pueden realizar tareas. Refiriéndonos
a comportamiento como acciones o capacidades de realizar
cambios; y a estados como situación o modo de estar en un
momento determinado.
Pero hay algo que debes saber también de los objetos. No
necesariamente todos deben derivar de una clase; pueden
existir objetos sin que hallan sido creados de una clase en
particular. Y en Python o Java casi todo es un objeto; puesto
que el concepto de la programación orientada a objetos consiste
en resolver problemas grandes subdividiendo nuestro programa
en otros más pequeños a cargo de objetos con determinadas
características y tareas encomendadas.

Es así entonces que podemos ver los


objetos como si fueran engranajes de nuestro programa;
si habláramos más en términos de relojería podría decirse
que estos son objetos que contienen una información
especifica (tamaños; apertura de dientes; etc.) y a su vez
realizan una acción determinada que resulta importante
para el funcionamiento de un sistema. Faltando uno que
otro engranaje nuestro reloj dejaría de funcionar.
Pues así también debemos planificar nuestro programa;
pensando en clases que crearán objetos y estos objetos
trabajaran y almacenaran datos para cumplir la función o
brindar la solución objetivo de nuestro programa.

Atributos y métodos de un objeto.


Ya te dije!!. Los objetos almacenan información y realizan tareas
coño!!. Entonces estos atributos pueden llamarse las
características que nosotros definimos para ese objeto.
Y métodos las tareas que son capaces de realizar!
Así comencemos a lavar tu cerebro para pensar orientado a
objetos suponiendo:

 Tenemos la Clase: Animal


 El objeto instanciado (creado a partir de esa
clase): Perro
 Que tiene sus atributos:

 Color: negro;
 Raza: Coquer;
 Tiene collar: True (si))
 Y tiene sus métodos:

 Ladra («Guau; guau»)
 Corre (Run)
 Camina()
 Olfatea()
Pero estos atributos y métodos se definen en la clase; al
momento de crear la clase y luego al momento
de instanciar (crear un objeto a partir de clase) se le brindan
los «argumentos» para esos atributos y métodos.
Recuerda que los atributos son las características del
objeto normalmente almacenadas en variables declaradas
en la clase.
Y los métodos podrían verse como funciones del objeto que
puede realizar y que a veces necesitan de ciertos argumentos
para poder operar con sus parámetros.
Fíjate ahora en el siguiente ejemplo y habrá de quedarte mucho
más claro. Por supuesto aquí solo estamos introduciendo el
pensamiento; lo abstracto de los conceptos y demás. Para
llevarse a cabo en Python o en cualquier otro lenguaje hay que
respetar cierta sintaxis y demás normas que luego habrás de
aprender.

Ejemplo gráfico de una Clase en python; objeto e


instancia

Fíjate en este ejemplo vamos a jugar a ser Dioses: Vamos a


crear la clase Humano que tendrá ciertos atributos propios de
cualquier ser Humano y algunos métodos también que pueden
realizar los seres humanos. A partir de esta clase vamos a crear
dos objetos: Marcos y Elisa. Que serán nuestros seres y al
momento de la instancia les vamos a dar los valores para cada
uno de sus atributos y métodos.
 La clase Humano posee Atributos (Fecha de nacimiento;
edad; Padres; Genero..)
 La clase Humano posee Métodos (Correr; Caminar y
Hablar)
 Los objetos Marcos y Elisa pertenecen a la misma Clase;
pero tienen Diferentes valores para los atributos y sus
métodos quizás obtengan diferentes argumentos (valores
para sus parámetros).

Repaso sobre clases y objetos


Entonces vamos a realizar un repaso; puesto que estos
conceptos y su entendimiento en profundidad son esenciales
para programar orientado a objetos de manera lógicamente
correcta.

 Clase: Plantilla o modelo a partir de la cual podemos crear


objetos y donde se determinan
los atributos (características) y métodos (acciones
realizables) que tendrán.

 Objeto: Normalmente creado a partir de una clase
son entidades que almacenan información en forma
de argumento para atributos y realizan acciones
organizadas a través de métodos que
permiten cambiar atributos o estados del objeto
o de otros objetos de la clase.
 Los atributos: Son variables de diferentes tipos
(Entero; Texto; Booleanos) que pueden tener
valores por defecto o le podrán ser asignadas al
momento de la Instancia de un
objeto determinando sus características y estado.
 Los métodos: Son funciones; acciones realizables
por el objeto que permiten cambiar sus atributos o
el de otros objetos de la clase permitiendo
un cambio de estado del objeto; a menudo
requiriendo «argumentos (valores)» para
determinados «parámetros (nombres de variables
establecidas en funciones o rutinas).
 Instancia: Palabra que refiere a la creación de un
objeto partiendo de una clase. Durante la instancia
son asignados los valores iniciales para los atributos.
Y Listo!! Ya sabes mucho sobre clases; es hora de ponerlo en
practica!!

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.

-Y tu te preguntaras y si es opcional ¿Para qué quiero yo


aprenderlo?

Pues el método constructor nos permitirá asignar atributos


cada vez que creemos un objeto a partir de esa clase
haciéndolo obligatorio. Y además nos permitirá llamar
métodos de la clase sin instanciar; entre otras cosas.
Supongamos que debo crear 50 objetos a partir de la
misma clase y todos esos métodos tendrán el atributo
«color».
Creamos la clase producto y el método constructor donde
definimos que el atributo color sera igual al parámetro
color que pasemos en el indice «0» (cero; primer
parámetro).
Class Producto():
Constructor __init__(self, color) :
self.color = color #Atributo
Instanciamos objetos:

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.

En estos ejemplos no respeto sintaxis del todo. Solo es


para que el usuario promedio comprenda la diferencia.
Sintaxis de clase e instancia + Ejemplo
Dijimos que instanciar era crear un objeto a partir de una
clase. Así que creemos de ejemplo la clase Humano con el
constructor anterior que luego explicare más abajo!!. Ve
despacio coño!

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:

1. Creamos la clase Humano.


2. Dentro de ella creamos el método constructor utilizando la
palabra reservada def seguida del constructor __init__y
luego entre paréntesis colocamos los parámetros;
donde el primero es una palabra reservada self (que
refiere al objeto mismo; ya lo veremos más adelante) y
seguido nuestros atributos separados por coma.
3. Indicamos mediante self.nombreatributo que
nuestro parámetro es igual al argumento que pasemos
como valor al momento de la instancia. Diciéndole al
interprete que cuando pasemos edad y nombre; sean
iguales a edad y nombre.
4. Ahora para crear un objeto de la clase Humano debemos
definir un nombre para nuestro objeto e indicar
mediante el operador de asignación «=» que pertenece a
la clase Humano y dentro de paréntesis indicar los valores
(argumentos) para «edad» y «nombre» (que son
parámetros). En este caso fue 31 y «pedro». Fíjate que el
orden debe ser igual a como definiste los argumentos
en el constructor de la clase.

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

Bien en el método constructor debemos añadir nuestro


nuevo atributo de instancia «Ocupacion». Si esta dentro del
constructor es un atributo de instancia lo que significa que
debe especificarse un «valor» al momento de crear el objeto a
partir de esta clase.
Así que lo añadimos como parámetro dentro del paréntesis del
constructor __init__ y también dentro del mismo
utilizando self («este o si mismo» [se refiere al objeto creado a
partir de la clase. Instanciado]). Fíjate:

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!

Añadiendo un nuevo método de instancia


Ya hablamos del método constructor. Ahora aprendamos los
métodos tradicionales que son los Métodos de clase (puesto que
existen 3 tipos de métodos; pero nos enfocaremos en el de
clase que es el más habitual. Ya tendremos tiempo de estudiar
los demás tipos!!)

Entonces en nuestro código anterior yo quisiera agregar


un método para retornar el valor de cada argumento de mi
objeto Persona1. Puesto que como has visto ya tenemos nuestro
objeto creado y todo. Pero NO HACE NADA!. Si ejecutas el
código en consola no obtienes error de sintaxis pero tampoco
obtienes ninguna salida!. Así que venga!. Vamos a crear un
método de clase que al ejecutarlo nos devuelva toda la
información de nuestro objeto.
Para crear un método lo hacemos a través de la palabra
reservada def (al igual que las funciones o como la utilizamos
para crear nuestro método constructor). Seguido a ella el
nombre del método y luego entre paréntesis los parámetros;
finalmente dos puntos «:» y continuamos debajo identando.
Como tu ya sabrás!

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.

También podría gustarte