Advertisement
teslariu

objetos parte 2

Sep 9th, 2022
899
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.04 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. """
  5. HERENCIA: es el proceso mediante el cual una clase asume los atributos y
  6. mètodos de otra. Las clases recién formadas se denominan secundarias y
  7. las originales principales
  8.  
  9. Las clases secundarias pueden anular, ampliar y/o modificar los atributos
  10. y mètodos de las clases principales o primarias. Tambièn pueden incorporar
  11. nuevos mètodos y/o atributos exclusivos para la clase secundaria
  12.  
  13. EJ: Una persona hereda el lenguaje de sus padres. Si aprende otro idioma, se dice que ha extendido sus atributos: ahora habla dos idiomas en lugar de uno
  14. Ha agregado algo
  15.  
  16.  
  17. class Perro:
  18.    especie = "Cais Familiaris"
  19.    
  20.    def __init__(self, nombre, edad):
  21.        self.nombre = nombre
  22.        self.edad = edad
  23.        self.raza = raza
  24.        
  25.    def __str__(self):
  26.        return f"{self.nombre} tiene {self.edad} años de edad"
  27.        
  28.    def ladra(self, sonido):
  29.        return f"{self.nombre} dijo {sonido}"
  30.        
  31. miles = Perro("Miles", 4, "Jack Russell Terrier")
  32. buddy = Perro("Buddy",9, "Dachshund")
  33. jack = Perro("Jack", 3, "Bulldog")
  34. jim =  Perro("Jim", 5, "Bulldog")      
  35.  
  36. print(buddy.ladra("Yap"))
  37. print(jack.ladra("Woof"))
  38. print(jim.ladra("Woof"))
  39.  
  40.  
  41. # como Jack y Jim son de la misma raza, ladran con el mismo sonido
  42. # "Woof" debería ser una atributo de la raza Bulldog
  43. # Por esto, creamos una clase hija para cada raza de perro.
  44. # Vamos a extender la funcionalidad añadiendo un argumento por default
  45.  
  46. # sacamos el atributo raza
  47. class Perro:
  48.    especie = "Canis Familiaris"
  49.    
  50.    def __init__(self, nombre, edad):
  51.        self.nombre = nombre
  52.        self.edad = edad
  53.                
  54.    def __str__(self):
  55.        return f"{self.nombre} tiene {self.edad} años de edad"
  56.        
  57.    def ladra(self, sonido):
  58.        return f"{self.nombre} dijo {sonido}"
  59.  
  60.  
  61. # creamos las clases hijas
  62. class JackRussellTerrier(Perro):
  63.    def ladra(self, sonido="Arf"):
  64.        return f"{self.nombre} dijo {sonido}"
  65.  
  66.  
  67. class Dachshund(Perro):
  68.    def ladra(self, sonido="Yap"):
  69.        return f"{self.nombre} dijo {sonido}"
  70.  
  71. class Bulldog(Perro):
  72.    def ladra(self, sonido="Woof"):
  73.        return f"{self.nombre} dijo {sonido}"
  74.  
  75. # instanciamos
  76. miles = JackRussellTerrier("Miles", 4)
  77. buddy = Dachshund("Buddy",9)
  78. jack = Bulldog("Jack", 3)
  79. jim =  Bulldog("Jim", 5)  
  80.  
  81. print(jim.ladra())
  82. print(jack.ladra())
  83. print(buddy.ladra())
  84.  
  85.  
  86. # ¿Qué pasa si un método de la clase Perro se modifica?
  87. class Perro:
  88.    especie = "Canis Familiaris"
  89.    
  90.    def __init__(self, nombre, edad):
  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 ladra(self, sonido):
  98.        return f"{self.nombre} gritó {sonido}"
  99.  
  100. # creamos las clases hijas
  101. class JackRussellTerrier(Perro):
  102.    def ladra(self, sonido="Arf"):
  103.        return f"{self.nombre} dijo {sonido}"
  104.  
  105.  
  106. class Dachshund(Perro):
  107.    def ladra(self, sonido="Yap"):
  108.        return super().ladra(sonido)
  109.  
  110.  
  111. class Bulldog(Perro):
  112.    def ladra(self, sonido="Woof"):
  113.        return f"{self.nombre} dijo {sonido}"
  114.  
  115. # instanciamos
  116. miles = JackRussellTerrier("Miles", 4)
  117. buddy = Dachshund("Buddy",9)
  118. jack = Bulldog("Jack", 3)
  119. jim =  Bulldog("Jim", 5)  
  120.  
  121. print(jim.ladra())
  122. print(jack.ladra())
  123. print(buddy.ladra())
  124.  
  125.  
  126. # Polimorfismo
  127. # nos permite invocar un método y obtener diferentes resultados según
  128. # el objeto
  129. # 1) con funciones      
  130. class Gato():
  131.    def __init__(self, nombre):
  132.        self.nombre = nombre
  133.        
  134.    def hablar(self):
  135.        return "MIAU"
  136.        
  137. class Perro():
  138.    def __init__(self, nombre):
  139.        self.nombre = nombre
  140.        
  141.    def hablar(self):
  142.        return "GUAU"        
  143.        
  144.        
  145. def escuchar(animal):
  146.    return animal.hablar()
  147.    
  148. cacho = Perro("cacho")
  149. fufu = Gato("fufu")
  150.  
  151. print(f"Un gato dice {escuchar(fufu)}")
  152. print(f"Un perro dice {escuchar(cacho)}")        
  153.  
  154.        
  155. # Polimorfismo
  156. # nos permite invocar un método y obtener diferentes resultados según
  157. # el objeto
  158. # 2) con herencia
  159.  
  160. class Animal():
  161.    def __init__(self, nombre):
  162.        self.nombre = nombre
  163.        
  164.    def hablar(self):
  165.        return "Hola"
  166.        
  167. class Gato(Animal):
  168.    def hablar(self):
  169.        return "MIAU"
  170.        
  171. class Perro(Animal):
  172.    def hablar(self):
  173.        return "GUAU"
  174.        
  175. cacho = Perro("cacho")
  176. fufu = Gato("fufu")
  177.  
  178. print(f"Un gato dice {fufu.hablar()}")
  179. print(f"Un perro dice {cacho.hablar()}")
  180.      
  181. """
  182. # HERENCIA MULTIPLE
  183.  
  184. class ClaseA:
  185.     def __init__(self):
  186.         self.a = 1
  187.        
  188.     def mensaje(self):
  189.         return "Mensaje de la ClaseA"
  190.    
  191. class ClaseB:
  192.     def __init__(self):
  193.         self.a = 2
  194.        
  195.     def mensaje(self):
  196.         return "Mensaje de la ClaseB"
  197.  
  198. class ClaseC(ClaseA, ClaseB):
  199.     pass
  200.  
  201. objeto = ClaseC()
  202. print(objeto.a)   # imprime 1 porque hereda de dercha a izquierda, el
  203.                 # último sobreewcribe
  204.  
  205. print(objeto.mensaje())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement