Advertisement
teslariu

objetos

Aug 6th, 2022
1,056
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.79 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. """
  5. POO - OOP
  6. programación orientada a objetos
  7. Modela el mundo real como si fuera compuesto de objetos de una clase
  8. particular
  9.  
  10. Clase: es un molde que genera objetos
  11. Ej: clase str , clase Perro, etc
  12. Objeto u instancia: es un elemento de la clase:
  13. Ej: cadena, cadena1, firulai, sultan
  14.  
  15. Metodos: todo lo que puede hacer un objeto de una clase:
  16. cadena.count("h")  sultan.ladrar() firulai.saltar()
  17.  
  18.  
  19. atributos: las caracteristicas del objeto
  20. cadena.ensdwith("h"), sultan,edad()
  21.  
  22.  
  23. class Perro:
  24.    # atributo de clase
  25.    especie = "Canis familiaris"
  26.    
  27.    def __init__(self,nombre,edad):
  28.        '''Crea los atributos de un objeto perro'''
  29.        self.nombre = nombre
  30.        self.edad = edad
  31.  
  32. # creo 2 instancias de perro
  33. sultan = Perro("Sultan",4)
  34. firulai = Perro("Firulai",5)
  35.  
  36. # Imprimo las caracteristicas
  37. print(f"El perro {sultan.nombre} tiene {sultan.edad} años")
  38. print(f"El perro {firulai.nombre} tiene {sultan.edad} años")
  39.  
  40. """
  41. class Perro:
  42.     # atributo de clase
  43.     especie = "Canis familiaris"
  44.    
  45.     def __init__(self,nombre,edad):
  46.         """Crea los atributos de un objeto perro"""
  47.         self.nombre = nombre
  48.         self.edad = edad
  49.        
  50.     def descripcion(self):
  51.         """Metodo que describe la instancia"""
  52.         return f"El perro {self.nombre} tiene {self.edad} años"
  53.        
  54.     def ladra(self,sonido):
  55.         """Creo el ladrido del perro"""
  56.         return f"{self.nombre} dijo {sonido}"
  57.        
  58.  
  59. tronco = Perro("Tronco",5)
  60. print(tronco.descripcion())
  61. print(tronco.ladra("Guau"))
  62.  
  63.  
  64. # mejoramos todo con metodos mágicos o dunder methods
  65. class Perro:
  66.     # atributo de clase
  67.     especie = "Canis familiaris"
  68.    
  69.     def __init__(self,nombre,edad):
  70.         """Crea los atributos de un objeto perro"""
  71.         self.nombre = nombre
  72.         self.edad = edad
  73.        
  74.     def __str__(self):
  75.         """Metodo que describe la instancia"""
  76.         return f"El perro {self.nombre} tiene {self.edad} años"
  77.        
  78.     def ladra(self,sonido):
  79.         """Creo el ladrido del perro"""
  80.         return f"{self.nombre} grita {sonido}"
  81.        
  82.     def __add__(*args):
  83.         return "Van a tener perritos..."
  84.        
  85.  
  86. tronco = Perro("Tronco",5)
  87. tronca = Perro("Tronca",3)
  88. print(tronco)
  89. print(tronco.ladra("Guau"))
  90.  
  91. print(tronco + tronca)
  92.        
  93.        
  94. #### Herencia
  95. # Proceso por el cual una clase secundariahereda atributos y mètodos de otra
  96. # principal pudiendo sobreescribirlos o no
  97. # Supongamos que quisiera agregar raza a los perros
  98.  
  99. # creo una clase secundaria
  100. class Bulldog(Perro):
  101.     def ladra(self, sonido="Arf"):
  102.         """Sobreescribo el mètodo del padre para no heredar si cambia"""
  103.         return f"{self.nombre} dijo {sonido}"
  104.        
  105. class Salchicha(Perro):
  106.     def ladra(self, sonido="Guau"):
  107.         """No sobreescribo, si cambia el padre voy a heredar los cambios"""
  108.         return super().ladra(sonido)
  109.  
  110. # instanciamos
  111. juancito = Salchicha("Juancito",5)
  112. jack = Bulldog("Jack",3)
  113.  
  114. print(juancito)
  115. print(jack.ladra())
  116. print(juancito.ladra())
  117.  
  118. # polimorfismo
  119. # llamar a un método con diferentes resultados dependiendo del objeto
  120. class Gato():
  121.     def __init__(self, nombre):
  122.         self.nombre = nombre
  123.    
  124.     def hablar(self):
  125.         print("Miau")
  126.    
  127. class Perro():
  128.     def __init__(self, nombre):
  129.         self.nombre = nombre
  130.        
  131.     def hablar(self):
  132.         print("Guau")
  133.        
  134.        
  135. def Mascota(animal):
  136.     animal.hablar()
  137.        
  138. cacho = Perro("cacho")
  139. fufu = Gato("fufu")
  140.  
  141. print(f"Un perro dice: ")
  142. Mascota(cacho)
  143.  
  144. print(f"Un gato dice: ")
  145. Mascota(fufu)
  146.        
  147. # lo mismo pero con herencia
  148. class Animal():
  149.     def hablar(self):
  150.         print("Hola...")
  151.        
  152. class Gato(Animal):
  153.     def __init__(self, nombre):
  154.         self.nombre = nombre
  155.    
  156.     def hablar(self):
  157.         print("Miau")
  158.    
  159. class Perro(Animal):
  160.     def __init__(self, nombre):
  161.         self.nombre = nombre
  162.        
  163.     def hablar(self):
  164.         print("Guau")
  165.        
  166.        
  167. def Mascota(animal):
  168.     animal.hablar()
  169.        
  170. cacho = Perro("cacho")
  171. fufu = Gato("fufu")
  172.  
  173. print(f"Un perro dice: ")
  174. Mascota(cacho)
  175.  
  176. print(f"Un gato dice: ")
  177. Mascota(fufu)
  178.  
  179. ##### HERENCIA MULTIPLE
  180. class A:
  181.     def __init__(self):
  182.         self.x = 1
  183.    
  184.     def mensaje(self):
  185.         print("Mensaje de la clase A")
  186.  
  187. class B:
  188.     def __init__(self):
  189.         self.x = 2
  190.        
  191.     def mensaje(self):
  192.         print("Mensaje de la clase B")
  193.        
  194. class C(A,B):
  195.     pass
  196.        
  197. objeto_clase_c = C()
  198. # la herencia múltiple se resuelve de derecha a izquierda:
  199. # va a heredar primero de B, y luego de A, pero A sobreescribe => x = 1
  200.  
  201. print(f"x vale {objeto_clase_c.x}")
  202.        
  203. objeto_clase_c.mensaje()
  204.        
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement