Advertisement
teslariu

objetos2

Feb 18th, 2022
568
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # HERENCIA
  5. #
  6. # Es el proceso mediante el cual una clase asume los atributos y métodos
  7. # de otra. Las clases recién formadas se denominan secundarias y las clases
  8. # de las cuales derivan, clases principales
  9.  
  10. # Las clases secundarias pueden AMPLIAR, MODIFICAR y/o ANULAR los atributos
  11. # de las clases principales.
  12.  
  13. # Una persona hereda el lenguaje de sus padres. Si sus padres hablan
  14. # español, el también lo hará. Pero si aprende ruso, AMPLIA su capacidad de
  15. # hablar, agregó un atributo (ruso) que no tenían sus padres
  16.  
  17. class Perro:
  18.     """Primer ejemplo de clase, con el único método __init__"""
  19.     # Atributos de clase (tienen el mismo valor para todas las instancias)
  20.     especie = "Canis Familiaris"
  21.    
  22.     def __init__(self, nombre, edad):
  23.         """Funciòn para "construir" (o inicializar) el objeto"""
  24.         self.nombre = nombre
  25.         self.edad = edad
  26.        
  27.        
  28.     def __str__(self):
  29.         """Crea un método de instancia"""
  30.         return f"{self.nombre} tiene {self.edad} años de edad"
  31.        
  32.     def ladra(self, sonido):
  33.         """Crea otro método de instancia"""
  34.         self.sonido = sonido
  35.         return f"{self.nombre} dijo {self.sonido}"
  36.  
  37.  
  38. class JackRussellTerrier(Perro):
  39.     def ladra(self, sonido="Arf"):
  40.         self.sonido = sonido
  41.         return f"{self.nombre} dijo {self.sonido}"
  42.        
  43.        
  44. class Daschund(Perro):
  45.     def ladra(self, sonido="Grrr"):
  46.         self.sonido = sonido
  47.         return f"{self.nombre} dijo {self.sonido}"
  48.        
  49. class Bulldog(Perro):
  50.     def ladra(self, sonido="Woof Woof"):
  51.         self.sonido = sonido
  52.         return f"{self.nombre} dijo {self.sonido}"
  53.        
  54. # instanciamos:
  55. miles = JackRussellTerrier("Miles",4)
  56. buddy = Daschund("Buddy",9)
  57. jack = Bulldog("Jack",5)
  58. jim = Bulldog("Jim",5)
  59.  
  60. print(jim.ladra())
  61.  
  62. # verifico la raza de una instancia
  63. print(isinstance(miles,Bulldog))  # --> False
  64.  
  65.  
  66. '''
  67. si en la clase Perro
  68.  
  69. def ladra(self, sonido):
  70.         """Crea otro método de instancia"""
  71.         self.sonido = sonido
  72.         return f"{self.nombre} dijo {self.sonido}"
  73.  
  74. cambio la palabra dijo por ladró, las clases secundarias o hijas no
  75. reflejarán el cambio. Se soluciona de la siguiente manera:
  76.  
  77. Si quiero actualizar los cambios en la clase secundaria, en vez de
  78.  
  79. class JackRussellTerrier(Perro):
  80.     def ladra(self, sonido="Arf"):
  81.         self.sonido = sonido
  82.         return f"{self.nombre} dijo {self.sonido}"
  83.        
  84. conviene
  85.  
  86. class JackRussellTerrier(Perro):
  87.     def ladra(self, sonido="Arf"):
  88.         self.sonido = sonido
  89.         return super().ladra(sonido)
  90. '''
  91. # POLIMORFISMO
  92.  
  93. # nos permite invocar un método de un objeto, y podrá tener distintos
  94. # resultados
  95.  
  96. class Gato1:
  97.     def __init__(self, nombre):
  98.         self.nombre = nombre
  99.        
  100.     def hablar(self):
  101.         print("MIAUU")
  102.        
  103. class Perro1:
  104.     def __init__(self, nombre):
  105.         self.nombre = nombre
  106.        
  107.     def hablar(self):
  108.         print("GUAUU")
  109.        
  110.  
  111. def EscucharMascota(animal):
  112.     animal.hablar()
  113.        
  114. cacho = Perro1("Cacho")
  115. fufu = Gato1("Fufu")
  116.  
  117. print("Un gato dice:")
  118. EscucharMascota(fufu)
  119. print("Un perro dice:")
  120. EscucharMascota(cacho)
  121.  
  122. #################### con herencia
  123.  
  124. class Animal:
  125.     def hablar(self):
  126.         print("Hola...")
  127.        
  128. class Gato2(Animal):
  129.     def __init__(self, nombre):
  130.         self.nombre = nombre
  131.        
  132.     def hablar(self):
  133.         print("MIAUU")
  134.        
  135. class Perro2(Animal):
  136.     def hablar(self):
  137.         print("Guau")
  138.        
  139. ozzy = Perro2()
  140. milka = Gato2("Milka")
  141.  
  142. print("Un perro dice")
  143. ozzy.hablar()
  144.  
  145. print("Un gato dice")
  146. milka.hablar()
  147.        
  148. # HERENCIA MULTIPLE
  149. class ClaseA:
  150.     def __init__(self):
  151.         self.x = 1
  152.        
  153. class ClaseB:
  154.     def __init__(self):
  155.         self.x = 2
  156.        
  157. class ClaseC(ClaseA, ClaseB):
  158.     pass
  159.    
  160.    
  161. mi_objeto = ClaseC()
  162. print(mi_objeto.x) # imprime 1 (porque hereda de ClaseA antes que de ClaseB)
Advertisement
RAW Paste Data Copied
Advertisement