Advertisement
teslariu

clases

Jan 29th, 2022
734
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. """
  5. Programación procedimental (como trabajamos hasta ahora): es una forma de
  6. estructurar programas como una receta, en donde se siguen una serie de
  7. pasos en forma de funciones y bloques de código secuencialmente hasta
  8. completar una tarea.
  9.  
  10. Programación orientada a objetos (POO): es una forma de estructurar
  11. programas en torno a objetos, sus propiedades y comportamientos
  12.  
  13. """
  14.  
  15. # Clases e instancias
  16. # Las clases se usan para estrcuturar datos y son definidas por el usuario.
  17. # Las clases definen funciones llamadas METODOS. Una instancia es un objeto
  18. # particular construido a partir de la clase que contiene datos reales
  19. # Los ATRIBUTOS de la clase definen las propiedades
  20.  
  21. class Perro:
  22.     # defino los atributos
  23.     # Atributo de clase
  24.     especie = "Canis familiaris"     # atributo con el mismo valor para
  25.                                     # todas las instancia
  26.    
  27.     # método especial para crear la instancia
  28.     def __init__(self, nombre, edad):   # atributo mutable
  29.         """Crea los atributos de la instancia"""
  30.         self.nombre = nombre
  31.         self.edad = edad
  32.        
  33. # Creo dos instancias de la clase perro
  34. sultan = Perro("Sultan",9)
  35. firulai = Perro("Firulai",4)
  36.  
  37. # imprimo la edad de firulai
  38. print(firulai.edad)
  39.  
  40. # imprimo el nombre de sultan
  41. print(sultan.nombre)
  42.  
  43. # imprimo el atributo de clase
  44.  
  45. # imprimo la edad de firulai
  46. print(firulai.especie)
  47.  
  48. # imprimo la edad de firulai
  49. print(sultan.especie)
  50.  
  51. # los atributos se pueden modificar
  52. sultan.edad = 7
  53. print(f"Edad de sultan: {sultan.edad}")
  54.    
  55. # modifico el valor de especie en sultan, no cambia en firulai
  56. sultan.especie = "Raza canina"
  57. print(firulai.especie)
  58.  
  59. ### Reescribir la clase Perro pero con más métodos
  60.  
  61. class Perro:
  62.     especie = "Canis familiaris"    
  63.                                    
  64.     def __init__(self, nombre, edad):
  65.         """Crea los atributos de la instancia"""
  66.         self.nombre = nombre
  67.         self.edad = edad
  68.        
  69.     def descripcion(self):
  70.         return f"{self.nombre} tiene {self.edad} años de edad"
  71.        
  72.     def ladrar(self, sonido):
  73.         return f"{self.nombre} dice {sonido}"
  74.        
  75. tronco = Perro("Tronco",4)
  76. print(tronco.descripcion())
  77. print(tronco.ladrar("Woof Woof"))
  78.  
  79. ### Mejoremos la descripción con __str__
  80. class Perro:
  81.     especie = "Canis familiaris"    
  82.                                    
  83.     def __init__(self, nombre, edad):
  84.         """Crea los atributos de la instancia"""
  85.         self.nombre = nombre
  86.         self.edad = edad
  87.        
  88.     def __str__(self):
  89.         return f"{self.nombre} tiene {self.edad} años de edad"
  90.        
  91.     def ladrar(self, sonido):
  92.         return f"{self.nombre} dice {sonido}"
  93.        
  94. duque = Perro("Duque",8)
  95. print(duque)
  96. print(tronco.ladrar("Guau"))
  97.  
  98. """
  99. Ej: Script que crea una clase Auto con dos atributos de instancia: color
  100. y kilometraje. Luego crear dos instancias, uno azul con 20000 kms y otro
  101. rojo con 30000 kms. Imprimir sus colores y kilometrajes.
  102. """
  103. class Auto:
  104.     def __init__(self, color, kilometraje):
  105.         self.color = color
  106.         self.kilometraje = kilometraje
  107.        
  108. auto_azul = Auto("azul", 20_000)
  109. auto_rojo = Auto(color="rojo", kilometraje=30_000)
  110. print(type(auto_azul))
  111.  
  112.  
  113. for auto in (auto_azul, auto_rojo):
  114.     print(f"El auto {auto.color} tiene un kilometraje de {auto.kilometraje} kms")
  115.    
  116. ##### HERENCIA
  117. """
  118. Una clase hereda a otra cuando asume sus atributos y mètodos. Las clases
  119. recien formadas son secundarias o hijas y las otras primarias o padres
  120.  
  121. Las clases secundarias pueden anular o ampliar los atributos y métodos
  122. """
  123. class Perro:
  124.     especie = "Canis familiaris"    
  125.                                    
  126.     def __init__(self, nombre, edad, raza):
  127.         """Crea los atributos de la instancia"""
  128.         self.nombre = nombre
  129.         self.edad = edad
  130.         self.raza = raza
  131.        
  132.     def __str__(self):
  133.         return f"{self.nombre} tiene {self.edad} años de edad"
  134.        
  135.     def ladrar(self, sonido):
  136.         return f"{self.nombre} dice {sonido}"
  137.  
  138. miles = Perro("miles",4,"Jack Rusell Terrier")
  139. jack = Perro("jack",3,"Bulldog")
  140. jim = Perro("jim",5,"Bulldog")
  141.  
  142. print(miles.ladrar("Yap"))
  143. print(jack.ladrar("Guau"))
  144. print(jim.ladrar("Guau")) # repetitivo, el sonido debe ser de la raza
  145.  
  146. # para solucionar creamos una clase hija para cada raza de perro
  147. class Perro:
  148.     especie = "Canis familiaris"    
  149.                                    
  150.     def __init__(self, nombre, edad):
  151.         """Crea los atributos de la instancia"""
  152.         self.nombre = nombre
  153.         self.edad = edad
  154.                
  155.     def __str__(self):
  156.         return f"{self.nombre} tiene {self.edad} años de edad"
  157.        
  158.     def ladrar(self, sonido):
  159.         return f"{self.nombre} dice {sonido}"
  160.  
  161. class JackRusellTerrier(Perro):
  162.     def ladrar(self, sonido="Yap"):
  163.         return f"{self.nombre} dice {sonido}"
  164.  
  165. class Bulldog(Perro):
  166.     def ladrar(self, sonido="Guau"):
  167.         return f"{self.nombre} dice {sonido}"
  168.        
  169. miles = JackRusellTerrier("miles",4)
  170. jack = Bulldog("jack",3)
  171. jim = Bulldog("jim",50)
  172.  
  173. print(jim.ladrar())
  174.  
  175. ### POLIMORFISMO
  176. # el polimorfismo nos posibilita invocar un método que devolverà distintos
  177. # resultados dependiendo del objeto
  178.  
  179. # Sin herencia
  180. class Gato:
  181.     def __init__(self, nombre):
  182.         self.nombre = nombre
  183.        
  184.     def hablar(self):
  185.         print("Miau")
  186.        
  187. class Perro:
  188.     def __init__(self, nombre):
  189.         self.nombre = nombre
  190.        
  191.     def hablar(self):
  192.         print("Guau")
  193.        
  194. def EscucharMascota(animal):
  195.     animal.hablar()
  196.    
  197. cacho = Perro("cacho")
  198. fufu = Gato("fufu")
  199.  
  200. EscucharMascota(cacho)
  201. EscucharMascota(fufu)
  202.  
  203. # Con herencia
  204. class Animal:
  205.     def hablar(self):
  206.         print("Hola....")
  207.        
  208. class Gato(Animal):
  209.     def __init__(self, nombre):
  210.         self.nombre = nombre
  211.        
  212.     def hablar(self):
  213.         print("Miau")
  214.        
  215. class Perro(Animal):
  216.     def __init__(self, nombre):
  217.         self.nombre = nombre
  218.        
  219.     def hablar(self):
  220.         print("Guau")
  221.        
  222. ozzy = Perro("ozzy")
  223. milka = Gato("milka")
  224.  
  225. milka.hablar()
  226. ozzy.hablar()
  227.  
  228. ###### HERENCIA MULTIPLE
  229.  
  230. class ClaseA:
  231.     def __init__(self):
  232.         self.x = 1
  233.    
  234. class ClaseB:
  235.     def __init__(self):
  236.         self.x = 2
  237.        
  238. class ClaseC(ClaseA, ClaseB):
  239.     pass
  240.        
  241. class ClaseD(ClaseB, ClaseA):
  242.     pass
  243.    
  244. objeto1 = ClaseC()
  245. objeto2 = ClaseD()
  246.  
  247. print(objeto1.x) # imprime 1
  248. print(objeto2.x) # imprime 2
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement