teslariu

objetos

Nov 18th, 2022 (edited)
1,240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.04 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. # Los métodos de la instancia son las cosas que puede hacer
  56. # ladrar, comer, saltar, dormir, morder, jugar
  57.  
  58. # Resscribo la clase Perro pero con métodos
  59.  
  60. class Perro:
  61.    # atributos de clase
  62.    especie = "Canis familiaris"
  63.    
  64.    def __init__(self,nombre,edad):
  65.        '''Construye la instancia creando sus atributos'''
  66.        self.nombre = nombre
  67.        self.edad = edad
  68.        
  69.    def describir(self):
  70.        return f"{self.nombre} tiene {self.edad} años de edad"
  71.        
  72.    def ladrar(self,sonido="guau"):
  73.        return f"{self.nombre} dijo {sonido}"
  74.        
  75. tronco = Perro("tronco",4)
  76.  
  77. print(tronco.describir())
  78. print(tronco.ladrar())
  79. print(tronco.ladrar("woof woof"))
  80.  
  81.  
  82. # reescribo la clase perro usando métodos mágicos o dunder methods
  83. class Perro:
  84.    # atributos de clase
  85.    especie = "Canis familiaris"
  86.    
  87.    def __init__(self,nombre,edad):
  88.        '''Construye la instancia creando sus atributos'''
  89.        self.nombre = nombre
  90.        self.edad = edad
  91.        
  92.    def __str__(self):
  93.        return f"{self.nombre} tiene {self.edad} años de edad"
  94.        
  95.    def ladrar(self,sonido="guau"):
  96.        return f"{self.nombre} dijo {sonido}"
  97.  
  98. tronco = Perro("tronco",4)
  99.  
  100. print(tronco)
  101. print(tronco.ladrar())
  102. print(tronco.ladrar("woof woof"))
  103.  
  104.  
  105. # Herencia: es el proceso mediante el cual una clase
  106. # llamada secundaria o hija asume atributos y
  107. # o metodos de otras clases, llamadas principales o padres
  108. # En PYTHON EXISTE LA HERENCIA MULTIPLE
  109.  
  110. # Si quisiera razas de perros, no voy a reescribir la clase Perro: simplemente
  111. # la heredo creando clases hijas
  112.  
  113. class JackRussellTerrier(Perro):
  114.    def ladrar(self,sonido="ARF"):
  115.        return f"{self.nombre} dijo {sonido}"
  116.  
  117. class Bulldog(Perro):
  118.    def ladrar(self,sonido="woof woof"):
  119.        return f"{self.nombre} dijo {sonido}"
  120.        
  121. # instancio
  122. miles = JackRussellTerrier("Miles",5)
  123. jim = Bulldog("Jim",4)
  124.  
  125. print(jim.ladrar())
  126. print(miles)
  127.  
  128. # verifico la raza de un perro
  129. print(isinstance(miles,JackRussellTerrier))
  130.  
  131. # Que pasa si la clase perro modifica su función ladrar (dijo por gritó)
  132. # mi raza sigue diciendo no grita como su clase padre
  133.  
  134. class Perro:
  135.    # atributos de clase
  136.    especie = "Canis familiaris"
  137.    
  138.    def __init__(self,nombre,edad):
  139.        '''Construye la instancia creando sus atributos'''
  140.        self.nombre = nombre
  141.        self.edad = edad
  142.        
  143.    def __str__(self):
  144.        return f"{self.nombre} tiene {self.edad} años de edad"
  145.        
  146.    def ladrar(self,sonido="guau"):
  147.        return f"{self.nombre} gritó {sonido}"
  148.  
  149. class JackRussellTerrier(Perro):
  150.    def ladrar(self,sonido="ARF"):
  151.        # return f"{self.nombre} dijo {sonido}"
  152.        return super().ladrar(sonido="ARF")   # invoca ladrar de la clse padre
  153.  
  154. jim = JackRussellTerrier("Jim",4)
  155. print(jim.ladrar())
  156. """
  157. # polimorfismo: el mismo método puede ser llamado por dos objetos distintos
  158.  
  159. class Gato:
  160.     def __init__(self, nombre):
  161.         self.nombre = nombre
  162.        
  163.     def hablar(self):
  164.         return "MIAU"
  165.  
  166.  
  167. class Perro:
  168.     def __init__(self, nombre):
  169.         self.nombre = nombre
  170.        
  171.     def hablar(self):
  172.         return "GUAU"
  173.  
  174. # creo el polimorfismo
  175. def EscucharMascota(animal):
  176.     return animal.hablar()
  177.    
  178.    
  179. cacho = Perro("cacho")
  180. fufu = Gato("fufu")
  181. print(f"Un perro dice {EscucharMascota(cacho)}")
  182. print(f"Un gato dice {EscucharMascota(fufu)}")
  183.  
  184.  
  185. # lo mismo usando herencia
  186. class Animal:
  187.     def __init__(self, nombre):
  188.         self.nombre = nombre
  189.        
  190.     def hablar(self):
  191.         pass
  192.    
  193.        
  194. class Gato(Animal):
  195.     def hablar(self):
  196.         return "MIAU"
  197.  
  198.  
  199. class Perro(Animal):
  200.     def hablar(self):
  201.         return "GUAU"        
  202.        
  203. cacho = Perro("cacho")
  204. fufu = Gato("fufu")
  205. print(f"Un perro dice {cacho.hablar()}")
  206. print(f"Un gato dice {fufu.hablar()}")
  207.  
  208. # herencia multiple
  209. # la clase hija hereda de sus padres resolviendo de derecha a izquierda
  210.  
  211. class PadreA:
  212.     def __init__(self):
  213.         self.a = 1
  214.        
  215.     def mensaje(self):
  216.         print("Soy A")
  217.        
  218. class PadreB:
  219.     def __init__(self):
  220.         self.a = 2
  221.        
  222.     def mensaje(self):
  223.         print("Soy B")
  224.        
  225.     def mensaje2(self):
  226.         print("Insisto, soy B")
  227.        
  228.  
  229.  
  230. class Hija(PadreA,PadreB):
  231.     pass
  232.    
  233.    
  234. hija = Hija()
  235. print(hija.a)  # imprime 1, la última herencia viene de PadreA
  236. hija.mensaje()
  237. hija.mensaje2()
Advertisement
Add Comment
Please, Sign In to add comment