Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2. Heren ia 8
2.1. Heren ia Múltiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2. Vo abulario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3. En apsula ión 10
3.1. Métodos para omparar objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2. Polimorsmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3. Vo abulario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1
Capítulo 1
Persona
nombre : str
edad : int
genero : str
Para la lase persona se han denido los atributos nombre de tipo adena, edad de tipo entero y genero de
tipo adena.
Después se tienen a iones que puede ha er una persona por ejemplo dormir, respirar estos métodos se
anotan omo:
Persona
nombre : str
edad : int
genero : str
dormir()
respirar()
Hay que ha er notar que Python no es un lenguaje que exija la deni ión del tipo de datos. Los tipos se
es riben olo ando dos puntos después del nombre de la variable. Estos tipos no son utilizados por el ompilador.
Estos se utilizan por el entorno de desarrollo para ayudar al programador a no ometer errores.
Las instan ias de una misma lase podrán ha er las mismas a iones:
2
Instan ia (objeto) Maria Instan ia (objeto) Juan
dormir() dormir()
respirar() respirar()
Podemos distinguir entre diferentes tipos de personas, por ejemplo, un estudiante tendrá al igual que persona
nombre, edad y genero. Puede tener atributos adi ionales tales omo año, urso y en método tomar examen. Un
profesor puede tener salario, fe ha de ini io y el metodo tomar examen. La gura siguiente muestra dos lases
estudiante y profesor que heredan den atributos y métodos de persona.
Persona Maria
dormir() dormir()
respirar() respirar()
Juan
nombre : Juan
edad : 23
genero : mas ulino
dormir()
respirar()
Como se, ve se ha eliminado mu ho ódigo repetido que es una forma de diseño muy de iente.
En el ejemplo se puso pass para tener una lase va ía. Como ve en la deni ión no se espe i a nada de los
atributos y métodos. Si se imprimen estas variables se obtiene:
print(Persona)
print(Juan)
Si se quiere registrar el nombre utilizamos la nota ión de punto que signi a olo ar un atributo de una
lase después de un punto. Para agregar el nombre a Maria El ódigo es omo sigue:
Maria.nombre='Maria'
print(Maria.nombre)
3
Esto tiene varios problemas: Juan no tiene un nombre asignado, y es posible que varias instan ias no tengan
todos los atributos que requieren.
Esto se solu iona on un método denominado onstru tor. Este método __init__se dene omo:
lass Persona:
def __init__(self,nombre,edad,genero):
self.nombre=nombre
self.edad=edad
self.genero=genero
EL atributo self se reere a la lase donde se ha olo ado. Ahora para rear instan ias de una lase hay que
pasar los atributos requeridos:
Un problema que persiste es que para a eder a un atributo; omo se ve en el ódigo para imprimir un
nombre; hay que ono er el nombre del atributo.
Para resolver esto existe el método __str__, que indi a lo que hay que devolver uando se imprime la
instan ia.
1.1.2. Métodos
Ahora es ne esario implementar los métodos dormir y respirar.
4
self.genero=genero
def __str__(self):
return f'Nombre={self.nombre}, Edad={self.edad}, Genero={self.genero}'
def dormir(self):
print(f'{self.nombre} esta durmirndo')
def respirar(self):
print(f'{self.nombre} esta respirando')
Como ve al llamar al método dormir se pro esa el método. Como se dijo on anterioridad self se reere a la
instan ia que llamó al método.
lass al uladora:
def __init__(self,version):
self.version=version
def des rip ion(self):
print(f'Esta orriendo la version: {self.version}')
a= al uladora(10)
b= al uladora(20)
a.des rip ion() # 10
b.des rip ion() # 20
El método des rip ión se denomina método de instan ia. Esto dado que ada instan ia utiliza el valor
denido por la variable self
def sumar(self,*numeros):
print(sum(numeros))
Vea que el resultado que éste método produ e, no depende de la lase dado que no utiliza la variable self.
Por esta razón puede ponerse omo un método fuera de la lase, omo sigue:
def sumar(*numeros):
print(sum(numeros))
Por este motivo se denomina método estáti o. También se puede mantenerse denomina en la lase indi ando
que es un método estáti o. Para esto se utilizan anota iones que son instru iones no eje utables que ayudan a
entender el ódigo.
5
stati method
def sumar(*numeros):
print(sum(numeros))
La instru ión stati method es una anota ión. Esto es una instru ión que se le da al ompilador para que
sepa que ha er. Esto informa a otros desarrolladores que uno ha de idido mantener el método dentro la lase.
a=Persona.edad_desde_anio('Juan',1975)
a.des rip ion()
En el ejemplo el método def edad_desde_anio devuelve una lase por eso se denomina lassmethod. Como
ve se ha ambiado self por ls que representa la lase a tual. La instru ión return devuelve la lase reada
on la edad al ulada en el método. Con la anota ión lassmethod se a lara que es un método alternativo para
rear la lase.
1.3. Vo abulario
Clase.- Es una estru tura (plantilla) que dene los atributos y omportamientos de un objeto. Los atributos
se denen omo variables y los omportamientos omo fun iones.
Atributo.- Un atributo es una variable aso iada a una lase. Los atributos alma enan informa ión espe í a
rela ionada on el objeto.
Constru tor.- Un onstru tor es un método espe ial dentro de una lase que se utiliza para dar valores
ini iales a los atributos de un objeto uando se rea una nueva instan ia.
Método.- Es una fun ión que dene las a iones que puede realizar el objeto.
Anota iones.- Las anota iones se reeren a la apa idad de agregar metadatos o informa ión adi ional a
variables, parámetros de fun iones y métodos
Método estáti o.- Es un método de una lase que no requiere una instan ia de lase para ser llamado.
Requiere un de orador @staticmethod
Método de lase.- En un método una lase que puede devolver una instan ia de la lase. Requiere el
de orador @classmethod
6
1.4. Ejemplo Prá ti o
Se va a rear una tienda de zapatillas, que tiene tres produ tos. Cada produ to tiene mar a y pre io. Para
lo ual se reara una lase para manejar los produ tos.
lass Zapatillas:
def __init__(self, mar a: str, pre io: int):
self.mar a=mar a
self.pre io=pre io
Esta lase tiene dos atributos, mar a y pre io. Para fa ilidad de modi a ión se han denido los tipos de
datos para ada atributo: mar a: str y pre io: int. Es ne esario re ordar que Python no veri ara los tipos de
datos, sin embargo el editor los utilizara para mejorar las ayudas que presta.
Para desplegar los elementos de la lase se implementa el método __str__
Par poder trabajar on los produ tos los alma enamos en una lista:
Ahora se quiere que el usuario ingrese el monto de dinero que tiene para omprar. Luego omenzando por
el produ to de mayor valor omprar todos los produ tos que se se pueda.
Para esto implementamos el método vender:
Si el monto al anza para el produ to lo ompra y devuelve el dinero que le queda menos lo gastado.
Para omprar quiere primero omprar el produ to de más valor pro lo que re orremos el ve tor en orden
inverso:
7
Capítulo 2
Heren ia
Se entiende por heren ia al on epto de que una lase hereda los métodos de otra. En nuestro ejemplo Profesor
tiene sus propios atributos, sin embargo, debe heredar todo lo orrespondiente a persona. Vea el ejemplo:
lass Persona:
def __init__(self, nombre, edad, genero):
self.nombre = nombre
self.edad=edad
self.genero = genero
def imprimeNombre(self):
print(self.nombre)
lass Profesor(Persona):
def __init__(self, nombre,edad,genero,sueldo):
super().__init__(nombre,edad,genero)
self.sueldo = sueldo
x = Profesor('Ramiro',50,'Mas ulino',1500)
x.imprimeNombre()
En la ini ializa ión de la lase Profesor se han puesto los atributos de persona y el atributo espe í o que es
sueldo. Para rear los datos de la persona se usó super().__init__(nombre,edad,genero). Esto permite Profesor
onoz a que pertene e a persona. Cuando se espe i a super se quiere indi ar a que lase a la que pertene e.
La lase Profesor no tiene el método imprimeNombre y este método es heredado de la lase Persona.
Cuando no tiene atributos adi ionales es su iente:
lass Profesor(Persona):
def imprimirNombre(self):
print(f'Profesor: {self.nombre}')
y=Profesor('Ramiro',50,'Mas ulino')
y.imprimirNombre()
En este aso tiene su propio método imprimirNombre y si los mismos atributos de Persona no requiere un
método init.
8
lass Auto:
def __init__(self, puerta, pla a):
self.puerta=puerta
self.aro = pla a
def start(self):
print('Arran ar auto:',self.puerta,self.pla a)
def avanza(self):
print('Avanzando')
lass Volador:
def __init__(self, ala):
self.ala = ala
def start(self):
print('Arran a el objeto Volador',self.ala)
super().start()
def vuele(self):
print('Volando')
Ahora se quiere un automóvil volador, éste nuevo objeto será una ombina ión de las lases Auto y Volador.
La impresión nal nos muestra que, auto volador es un objeto formado de auto y volador.
(< lass '__main__.AutoVolador'>, < lass '__main__.Volador'>, < lass '__main__.Auto'>, < lass 'obje t
2.2. Vo abulario
Heren ia.- La propiedad de heredar métodos de otra lase.
Heren ia múltiple.- La propiedad de métodos de varias lases.
La propiedad __mro__ .- Lista los objetos que forman el objeto a tual.
9
Capítulo 3
En apsula ión
Cuando los datos de una lase son a esible dire tamente existe el riesgo que se modique y que estas
modi a iones no sean ade uadamente validadas. Por este motivo no todos los datos deben ser a esibles
dire tamente. Este pro eso se denomina en apsula ión.
La nalidad es de que no puedan ser modi ado sin el uso de los métodos de su lase. Vea el siguiente
ejemplo:
lass Persona:
def __init__(self,nombre,edad,genero):
self.nombre=nombre # dato publi o
self.__edad=edad #dato privado
self.genero=genero # dato publi o
def __str__(self):
return f'Nombre={self.nombre}, Edad={self.__edad}, Genero={self.genero}'
y=Persona('Ramiro',50,'Mas ulino')
print(y)
print(y.__edad)
En el atributo edad se han agregado dos guiones bajo antes del nombre. Esto onvierte a edad en una
variable privada solo a esible dentro de la lase.
Cuando se quiere a eder a la variable edad fuera de la lase se obtiene el siguiente mensaje de error.
Para poder a eder a esta variable es ne esario rear métodos, que se denominan geters y seters. A a se han
reado dos métodos uno para a eder a la variable edad y otro para ambiar su ontenido. Respe tivamente son
getEdad y setEdad.
lass Persona:
def __init__(self,nombre,edad,genero):
self.nombre=nombre # dato publi o
self.__edad=edad #dato privado
self.genero=genero
def getEdad(self):
return self.__edad
def setEdad(self,edad):
self.__edad=edad
def __str__(self):
return f'Nombre={self.nombre}, Edad={self._edad}, Genero={self.genero}'
10
y=Persona('Ramiro',50,'Mas ulino')
print(y.getEdad())
y.setEdad(35)
print(y.getEdad())
En la POO en el lenguaje python se han reado dos formas que simpli an la programa ión, estas son:
property y de orator.
Para mostrar su uso se va ha agregar mensajes en pantalla para mostrar que efe tivamente el pro eso pasa
por allí. El uso de property es omo sigue:
lass Persona:
def __init__(self,nombre,edad,genero):
self.nombre=nombre # dato publi o
self.__edad=edad #dato privado
self.genero=genero
def getEdad(self):
print('se llamo el metodo get')
return self.__edad
def setEdad(self,edad):
print('se llamo el metodo set')
self.__edad=edad
def __str__(self):
return f'Nombre={self.nombre}, Edad={self.__edad}, Genero={self.genero}'
edad = property(getEdad, setEdad)
y=Persona('Ramiro',50,'Mas ulino')
print(y.edad)
y.edad=35
print(y.edad)
La ventaja que se ve es que al utilizar no hay que ha er referen ia al método sino dire tamente a las variables.
y los métodos son llamados en forma automáti a. Esto se logra agregando la fun ión property
El uso de de oradores simpli a esto omo sigue:
lass Persona:
def __init__(self,nombre,edad,genero):
self.nombre=nombre # dato publi o
self.__edad=edad #dato privado
self.genero=genero
property
def edad(self):
print('se llamo el metodo get')
return self.__edad
edad.setter
def edad(self,edad):
print('se llamo el metodo set')
self.__edad=edad
def __str__(self):
11
return f'Nombre={self.nombre}, Edad={self.__edad}, Genero={self.genero}'
y=Persona('Ramiro',50,'Mas ulino')
print(y.edad)
#y.edad=35
print(y.edad)
En lugar de in luir el método property se agrega el de orador property en la línea anterior de la deni ión
de la fun ión. Cada vez que se quiere leer la variable pasa automáti amente por la fun ión.
Se ha reado un segundo de orador on el mismo nombre y que ante ede a la fun ión on el nombre
edad.setter que espe i a que esa es la fun ión que se debe llamar para ambiar el valor.
def __lt__(self,otro):
return self.edad < otro.edad
y=Persona('Ramiro',50,'Mas ulino')
x=Persona('Lu ia',35,'Femenino')
l=[y,x℄
l.sort()
for i in l:
print(i)
Existen métodos para la igualdad (eq), menor (lt), menor o igual (le), mayor (gt), mayor o igual (ge). Los
mismo se es riben de la misma forma que el ejemplo mostrado.
3.2. Polimorsmo
Polimorsmo es la apa idad de invo ar a un mismo método y en fun ión al objeto que lo invo a obtiene
un resultado diferente. Para esto es ne esario que las lases que manejarán objetos diferentes tengan el mismo
nombre del método.
Considere dos lases empleado y obrero. Para al ular el salario de obrero y empleado se requieren diferentes
fórmulas para la antigüedad, horas extraordinarias, et . En el ejemplo primero reamos las lases empleado y
obrero. Para simpli idad del ejemplo solo es una lase on un solo método al uloSueldo.
lass Empleado:
def al uloSueldo(self):
print('Cal ulo sueldo empleado')
lass Obrero:
def al uloSueldo(self):
print('Cal ulo sueldo obrero')
Ahora reamos dos objetos diferentes, empleado y obrero, e invo amos al método al uloSueldo
12
a=Empleado()
b=Obrero()
a. al uloSueldo()
b. al uloSueldo()
El resultado es:
Como ve on el polimorsmo no es ne esario espe i ar a que lase se reere, esto se ha e en forma automáti a
y transparente fa ilitando el desarrollo.
3.3. Vo abulario
En apsular.- Es el pro eso de ha er que los atributos de la lase no puedan a ederse dire tamente.
__lt__.- Remplaza a la las instru ión < para implementar esta omo parte de la lase.
Geter.- Se denomina a la fun ión que permite leer una atributo en una lase.
Seter.- Se denomina a la fun ión que permite ambiar los valores de una atributo en una lase.
property .- es un método que espe i a la fun ión geter y la fun ión seter de un atributo.
@property .- Es un de orador que se pone para indi ar ual es la fun ión. geter de una variable en una
lase.
Polimorsmo. Es la a ión de invo ar a un mismo método para objetos diferentes. Dependiendo del objeto
se realizan las a iones apropiadas.
13