Advertisement
teslariu

objetos_python

Aug 17th, 2023
1,134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.71 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. '''
  5. POO (OOP) prog orientada a objetos: es un paradigma de programación
  6. que proporciona medios para estructurar programas para que las propiedades
  7. y los comportamientos se agreguen en objetos individuales
  8.  
  9. "Existen seres (objetos, sustantivos) que hacen cosas (comportamientos, verbos)
  10. y tienen propiedades (muchas veces adjetivos)"
  11.  
  12. "Los objetos interactuan entre si enviandose mensajes (mètodos)"
  13.  
  14. POO modela entidades del mundo real como objetos de software
  15.  
  16. # los dunder methods o mètodos màgicos: EMPIEZAN CON DOBLE GUION BAJO __
  17.  
  18. # Ej partido de futbol:
  19. clases: futbolista, arbitro, espectador, periodista
  20. instancias de clases: son individuos de una clase
  21. EJ; Messi es una instancia de la clase Futbolista
  22. Yo soy una instancia de la clase Espectador
  23.  
  24. En Python Las clases e instancias tienen atributos (adjetivos) y métodos (verbos)
  25.  
  26.  
  27. class Perro:
  28.     # atributo de clase
  29.     especie = "Canis familiaris"
  30.    
  31.     def __init__(self, nombre, edad, pelaje):
  32.         """Método que crea una instancia"""
  33.         self.nombre = nombre
  34.         self.edad = edad
  35.         self.pelaje = pelaje
  36.        
  37.     def descripcion(self):
  38.         return f"{self.nombre} tiene {self.edad} años y pelo {self.pelaje}"
  39.        
  40.     def ladra(self, sonido):
  41.         return f"{self.nombre} dijo {sonido}"
  42.        
  43.        
  44.        
  45. # creo dos instancias de perro
  46. sultan = Perro("sultan",10,"cobrizo")
  47. firulai = Perro("firulai",5,"cafe")
  48.  
  49. print(f"Objeto sultan: {sultan}")
  50. print(f"Nombre del objeto firulai: {firulai.nombre}")
  51. print(f"Pelaje de sultan: {sultan.pelaje}")
  52.  
  53.  
  54. # los objetos son mutables
  55. sultan.edad = 4
  56. firulai.especie = "Raza canina"
  57. print(sultan.edad)
  58. print(firulai.especie)
  59.  
  60.  
  61. # describo a firulai
  62. print(firulai.descripcion())
  63.  
  64. # muestro como ladra sultan
  65. print(sultan.ladra("guau"))
  66.  
  67. class Perro:
  68.     # atributo de clase
  69.     especie = "Canis familiaris"
  70.    
  71.     def __init__(self, nombre, edad, pelaje):
  72.         """Método que crea una instancia"""
  73.         self.nombre = nombre
  74.         self.edad = edad
  75.         self.pelaje = pelaje
  76.    
  77.     def __add__ (self1, self2):
  78.         return f"{self1.nombre} y {self2.nombre} han tenido hijos"
  79.        
  80.     def __str__(self):
  81.         return f"{self.nombre} tiene {self.edad} años y pelo {self.pelaje}"
  82.        
  83.     def ladra(self, sonido):
  84.         return f"{self.nombre} gritó {sonido}"
  85.  
  86. # sultan = Perro("sultan",10,"cobrizo")
  87. # firulai = Perro("firulai",5,"cafe")
  88.  
  89. # print(firulai)
  90. # print(firulai + sultan)
  91.  
  92. # HERENCIA: las clases pueden construirse a partir de otras clases
  93. # preexistentes. Las clases recien formadas se llaman hijas o secundarias
  94. # y las originales padres o principales
  95.  
  96. # las clases secundarias pueden ampliar y/o borrar atributos y/o metodos
  97. # de sus padres. Las clases hijas HEREDAN los metodos y atributos de sus padres
  98.  
  99. class Bulldog(Perro):
  100.     # No hereda posibles modificaciones del metodo ladra en Perro
  101.     # es buena idea que si las herede
  102.     # def ladra(self):
  103.     #   return f"{self.nombre} dijo ARFF"
  104.     def ladra(self):
  105.         return super().ladra("ARFF")
  106.  
  107.  
  108. class Salchicha(Perro):
  109.     def ladra(self):
  110.         return f"{self.nombre} dijo guau"
  111.  
  112. sultan = Bulldog("sultan",10,"cobrizo")
  113. firulai = Salchicha("firulai",5,"cafe")
  114.  
  115. print(sultan)
  116. print(firulai)
  117. print(sultan.ladra())
  118. print(firulai.ladra())
  119.  
  120. # verificamos las clases a las que pertenece sultan
  121. print(isinstance(sultan, Bulldog))
  122. print(isinstance(sultan, Perro))
  123.  
  124.  
  125. ### POLIMORFISMO sin herencia
  126. # dos clases distintas con un metodo del mismo nombre
  127. class Gato:
  128.     def __init__(self,nombre):
  129.         self.nombre = nombre
  130.        
  131.     def hablar(self):
  132.         return "MIAU"
  133.  
  134. class Perro:
  135.     def __init__(self,nombre):
  136.         self.nombre = nombre
  137.        
  138.     def hablar(self):
  139.         return "GUAU"
  140.        
  141. def habla_mascota(animal):
  142.     return animal.hablar()
  143.    
  144. cacho = Perro("cacho")
  145. fufu = Gato("fufu")
  146.  
  147. print(f"Un perro dice {habla_mascota(cacho)}")
  148. print(f"Un gato dice {habla_mascota(fufu)}")
  149.        
  150.        
  151. ### POLIMORFISMO con herencia (clase abstracta animal, no se instancia)
  152. class Animal():
  153.     def hablar(self):
  154.         return "MIAU"
  155.        
  156. class Gato(Animal):
  157.     def __init__(self,nombre):
  158.         self.nombre = nombre
  159.        
  160.    
  161. class Perro(Animal):
  162.     def __init__(self,nombre):
  163.         self.nombre = nombre
  164.        
  165.     def hablar(self):
  166.         return "GUAU"
  167.        
  168. cacho = Perro("cacho")
  169. fufu = Gato("fufu")    
  170.  
  171. print(f"Un perro dice {cacho.hablar()}")
  172. print(f"Un gato dice {fufu.hablar()}")
  173.  
  174. '''
  175. # HERENCIA MULTIPLE: una clase hija con varios padres
  176. class Padre:
  177.     def __init__(self):
  178.         self.progenitor = "papá"
  179.    
  180.     def mensaje(self):
  181.         print("Mensaje de papá")
  182.        
  183. class Madre:
  184.     def __init__(self):
  185.         self.progenitor = "mamá"
  186.        
  187.     def mensaje(self):
  188.         print("Mensaje de mamá")
  189.        
  190.  
  191. class Hijo(Padre, Madre):
  192.     pass
  193.    
  194. hija_maria = Hijo()
  195. print(hija_maria.progenitor) # mamá sobreescribe a papá
  196. hija_maria.mensaje()
  197.  
  198.  
  199.  
  200.  
  201.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement