teslariu

poo python

Jan 19th, 2023
995
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.60 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. """
  5. POO programacion orientada a objetos es un paradigma de programación:
  6. en POO: se intenta modelar un problema en funcion de objetos que tienen
  7. propiedades y pueden hacer cosas
  8.  
  9. Problema: hacer un software que administre un aeropuerto:
  10.  
  11. objetos: avion boeing767, piloto Juan Gomez, azafata Luisa Lane
  12. avion boeing 747, pasajero Juan Perez
  13.  
  14. Los objetos pueden agruparse en clases:
  15. clase avion, clase piloto, clase azafata, clase despachante, clase pasajero
  16.  
  17. Cuando creo UN OBJETO PARTICULAR se dice que es una instancia de clase
  18. ej boeing786 es una instancia de la clase avión
  19.  
  20. ATRIBUTOS: adjetivos   METODOS: verbos
  21.  
  22.  
  23. # Vamos a crear una clase perro
  24. # cada caracteristica de un perro es un atributo: pelaje, edad, raza, tamaño, etc
  25. # la mayoria de los atributos varian de perro en perro
  26. # Los atributos iguales para todos los perros se llaman ATRIBUTOS DE CLASE
  27.  
  28. class Perro:
  29.    # atributos de clase
  30.    especie = "Canis familiaris"
  31.    
  32.    def __init__(self,nombre,edad):
  33.        '''Construye la instancia creando sus atributos'''
  34.        self.nombre = nombre
  35.        self.edad = edad
  36.        
  37. # creo dos instancias de perro
  38. sultan = Perro("Sultan",6)
  39. firulai = Perro("Firulai",4)
  40.  
  41. # imprime alguna atributos
  42. print(f"Edad de firulai: {firulai.edad}")
  43. print(f"ESpecie de los perros: {sultan.especie}")
  44. print(f"Nombre de sultan: {sultan.nombre}")
  45.  
  46. # los atributos se pueden modificar /los objetos son mutables por default
  47. sultan.especie = "Marca perro"
  48. sultan.edad = 2
  49.  
  50. print(sultan.especie)
  51. print(firulai.especie)
  52. print(sultan.edad)
  53.  
  54.  
  55.  
  56.  
  57. # Los métodos de la instancia son las cosas que puede hacer
  58. # ladrar, comer, saltar, dormir, morder, jugar
  59.  
  60. # Resscribo la clase Perro pero con métodos
  61.  
  62. class Perro:
  63.    # atributos de clase
  64.    especie = "Canis familiaris"
  65.    
  66.    def __init__(self,nombre,edad):
  67.        '''Construye la instancia creando sus atributos'''
  68.        self.nombre = nombre
  69.        self.edad = edad
  70.        
  71.    def describir(self):
  72.        return f"{self.nombre} tiene {self.edad} años de edad"
  73.        
  74.    def ladrar(self,sonido="guau"):
  75.        return f"{self.nombre} dijo {sonido}"
  76.        
  77. tronco = Perro("tronco",4)
  78.  
  79. print(tronco.describir())
  80. print(tronco.ladrar())
  81. print(tronco.ladrar("woof woof"))
  82.  
  83.  
  84. # reescribo la clase perro usando métodos mágicos o dunder methods
  85. class Perro:
  86.    # atributos de clase
  87.    especie = "Canis familiaris"
  88.    
  89.    def __init__(self,nombre,edad):
  90.        '''Construye la instancia creando sus atributos'''
  91.        self.nombre = nombre
  92.        self.edad = edad
  93.        
  94.    def __str__(self):
  95.        return f"{self.nombre} tiene {self.edad} años de edad"
  96.        
  97.    def ladrar(self,sonido="guau"):
  98.        return f"{self.nombre} dijo {sonido}"
  99.  
  100.  
  101. tronco = Perro("tronco",4)
  102.  
  103. print(tronco)
  104. print(tronco.ladrar())
  105. print(tronco.ladrar("woof woof"))
  106.  
  107.  
  108. # Herencia: es el proceso mediante el cual una clase
  109. # llamada secundaria o hija asume atributos y
  110. # o metodos de otras clases, llamadas principales o padres
  111. # En PYTHON EXISTE LA HERENCIA MULTIPLE
  112.  
  113. # Si quisiera razas de perros, no voy a reescribir la clase Perro: simplemente
  114. # la heredo creando clases hijas
  115. class Perro:
  116.    # atributos de clase
  117.    especie = "Canis familiaris"
  118.    
  119.    def __init__(self,nombre,edad):
  120.        '''Construye la instancia creando sus atributos'''
  121.        self.nombre = nombre
  122.        self.edad = edad
  123.        
  124.    def __str__(self):
  125.        return f"{self.nombre} tiene {self.edad} años de edad"
  126.        
  127.    def ladrar(self,sonido="guau"):
  128.        return f"{self.nombre} dijo {sonido}"
  129.  
  130.  
  131. class JackRussellTerrier(Perro):
  132.    def ladrar(self,sonido="ARF"):
  133.        return f"{self.nombre} dijo {sonido}"
  134.  
  135. class Bulldog(Perro):
  136.    def ladrar(self,sonido="woof woof"):
  137.        return f"{self.nombre} dijo {sonido}"
  138.        
  139. # instancio
  140. miles = JackRussellTerrier("Miles",5)
  141. jim = Bulldog("Jim",4)
  142.  
  143. print(jim.ladrar())
  144. print(miles)
  145.  
  146. # verifico la raza de un perro
  147. print(isinstance(miles,JackRussellTerrier))
  148.  
  149.  
  150.  
  151. # Que pasa si la clase perro modifica su función ladrar (dijo por gritó)
  152. # mi raza sigue diciendo no grita como su clase padre
  153.  
  154. class Perro:
  155.    # atributos de clase
  156.    especie = "Canis familiaris"
  157.    
  158.    def __init__(self,nombre,edad):
  159.        '''Construye la instancia creando sus atributos'''
  160.        self.nombre = nombre
  161.        self.edad = edad
  162.        
  163.    def __str__(self):
  164.        return f"{self.nombre} tiene {self.edad} años de edad"
  165.        
  166.    def ladrar(self,sonido="guau"):
  167.        return f"{self.nombre} ladro {sonido}"
  168.  
  169. class JackRussellTerrier(Perro):
  170.    def ladrar(self,sonido="ARF"):
  171.        return super().ladrar(sonido="ARF")   # invoca ladrar de la clse padre
  172.        
  173.  
  174. class Bulldog(Perro):
  175.    def ladrar(self,sonido="woof woof"):
  176.        return f"{self.nombre} dijo {sonido}"
  177.        
  178.  
  179. jim = JackRussellTerrier("Jim",4)
  180. cacho = Bulldog("Cacho",4)
  181. print(jim.ladrar())
  182. print(cacho.ladrar())
  183.  
  184. # polimorfismo: el mismo método puede ser llamado por dos objetos distintos
  185.  
  186. class Gato:
  187.    def __init__(self, nombre):
  188.        self.nombre = nombre
  189.        
  190.    def hablar(self):
  191.        return "MIAU"
  192.  
  193.  
  194. class Perro:
  195.    def __init__(self, nombre):
  196.        self.nombre = nombre
  197.        
  198.    def hablar(self):
  199.        return "GUAU"
  200.  
  201. # creo el polimorfismo
  202. def EscucharMascota(animal):
  203.    return animal.hablar()
  204.    
  205.    
  206. cacho = Perro("cacho")
  207. fufu = Gato("fufu")
  208. print(f"Un perro dice {EscucharMascota(cacho)}")
  209. print(f"Un gato dice {EscucharMascota(fufu)}")
  210.  
  211.  
  212. # lo mismo usando herencia
  213. class Animal:
  214.    def __init__(self, nombre):
  215.        self.nombre = nombre
  216.        
  217.    def hablar(self):
  218.        pass
  219.    
  220.        
  221. class Gato(Animal):
  222.    def hablar(self):
  223.        return "MIAU"
  224.  
  225.  
  226. class Perro(Animal):
  227.    def hablar(self):
  228.        return "GUAU"        
  229.        
  230. cacho = Perro("cacho")
  231. fufu = Gato("fufu")
  232. print(f"Un perro dice {cacho.hablar()}")
  233. print(f"Un gato dice {fufu.hablar()}")
  234.  
  235. """
  236. # herencia multiple
  237. # la clase hija hereda de sus padres resolviendo de derecha a izquierda
  238.  
  239. class Padre:
  240.     def __init__(self):
  241.         self.a = 1
  242.        
  243.     def mensaje(self):
  244.         print("Soy A")
  245.        
  246. class Madre:
  247.     def __init__(self):
  248.         self.a = 2
  249.        
  250.     def mensaje(self):
  251.         print("Soy B")
  252.        
  253.     def mensaje2(self):
  254.         print("Insisto, soy B")
  255.        
  256.  
  257.  
  258. class Hija(Padre,Madre):
  259.     pass
  260.    
  261.    
  262. hija = Hija()
  263. print(hija.a)  # imprime 1, la última herencia viene de PadreA
  264. hija.mensaje()
  265. hija.mensaje2()
  266.  
Advertisement
Add Comment
Please, Sign In to add comment