teslariu

oop clases

May 19th, 2023
1,183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.42 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. POO,OOP: programación orientada a objetos
  5.  
  6. Es un paradigma de programación que proporciona un medio para estructurar
  7. programas para que las propiedades (adjetivos) y los comportamientos (verbos)
  8. se agrupen en objetos individuales (sustantivos)
  9.  
  10. Ejemplo: en un partido de futbol masculino existen objetos individuales
  11. con comportamientos y atrobutos similares:
  12. algunos objetos: pelotas, jugadores, arbitros, espectadores, periodistas, etc
  13.  
  14. OOP modela entidades del mundo real como objetos de software
  15.  
  16. CLASES: son estructuras de datos definidas por el usuario y que definen
  17. un tipo de objeto. Puede haber clases padres, hijas, etc
  18.  
  19. INSTANCIA: es un objeto particular
  20.  
  21. Metodos: son los comportamientos (funciones)
  22. Atributos: son las propiedades de las clases
  23.  
  24. EJ: si quiero modelizar un zoo, creo una clase Animal. De esa clase, derivo una clase hija llamada Perro
  25.  
  26. CLASE: Perro
  27.  
  28. Instancia: Bobby, Cacho, RinTinTin
  29.  
  30. Métodos: correer, ladrar, morder, jugar, dormir, etc
  31. Atributos: tipo de pelaje, color de pelaje, edad, peso, nombre, raza, etc
  32.  
  33.  
  34.  
  35.  
  36.  
  37. class Perro:
  38.    # Atributo de clase: es el mismo para toda instancia
  39.    especie = "Canis familiaris"
  40.    
  41.    # escribo una función para crear una instancia
  42.    def __init__(self, nombre, edad):
  43.        '''Crea los atributos de cada instancia'''
  44.        self.nombre = nombre
  45.        self.edad = edad
  46.        
  47.        
  48. # Creo dos instancias de la clase Perro
  49. sultan = Perro("Sultan",2)
  50. firulai = Perro("Firulai",10)
  51.  
  52. # Imprimo el nombre de la instancia firulai
  53. print(firulai.nombre)
  54.    
  55. # Imprimo la edad de la instancia sultan
  56. print(sultan.edad)    
  57.    
  58. # Todos los atributos son mutables por default
  59. sultan.edad = 8
  60. print(sultan.edad)
  61.  
  62. firulai.especie = "Raza canina"
  63. print(firulai.especie)
  64. print(sultan.especie)
  65.  
  66.  
  67.    
  68. # Reescribimos la clase Perro con métodos
  69. class Perro:
  70.    # Atributo de clase: es el mismo para toda instancia
  71.    especie = "Canis familiaris"
  72.    
  73.    # escribo una función para crear una instancia
  74.    def __init__(self, nombre, edad):
  75.        '''Crea los atributos de cada instancia'''
  76.        self.nombre = nombre
  77.        self.edad = edad
  78.        
  79.    def descripcion(self):
  80.        return f"{self.nombre} tiene {self.edad} años de edad"
  81.        
  82.    def ladra(self, sonido):
  83.        return f"{self.nombre} dijo {sonido}"
  84.        
  85. tronco = Perro("Tronco",4)
  86.  
  87. print(tronco.descripcion())
  88. print(tronco.ladra("Woof woof"))
  89.  
  90. # mejoremos la descripcion con la funcion __str__
  91. class Perro:
  92.    # Atributo de clase: es el mismo para toda instancia
  93.    especie = "Canis familiaris"
  94.    
  95.    # escribo una función para crear una instancia
  96.    def __init__(self, nombre, edad):
  97.        '''Crea los atributos de cada instancia'''
  98.        self.nombre = nombre
  99.        self.edad = edad
  100.        
  101.    def __str__(self):
  102.        return f"{self.nombre} tiene {self.edad} años de edad"
  103.        
  104.    def ladra(self, sonido):
  105.        return f"{self.nombre} dijo {sonido}"
  106.        
  107. #    def __add__(self):
  108. #        from random import randint
  109. #        return f"{nombre1} y {nombre2} tuvieron {randint(1,8)} cachorros"
  110.        
  111. tronco = Perro("Tronco",4)
  112. josefa = Perro("Josefa",5)
  113.  
  114. print(tronco)
  115. print(tronco.ladra("Woof woof"))
  116. print(tronco.nombre + josefa.nombre)
  117.  
  118.  
  119. # HERENCIA: es el proceso mediante el cual una clase asume los atributos
  120. # y mètodos de otra clase. Las clases nuevas se denomiman hijas o secundarias
  121. # y las otras, padres o primarias. Las hijas pueden sobreescribir
  122. # metodos y/o atributos de los padres y/o añadir nuevos (extender la clase)
  123.  
  124. class Perro:
  125.    # Atributo de clase: es el mismo para toda instancia
  126.    especie = "Canis familiaris"
  127.    
  128.    # escribo una función para crear una instancia
  129.    def __init__(self, nombre, edad, raza):
  130.        '''Crea los atributos de cada instancia'''
  131.        self.nombre = nombre
  132.        self.edad = edad
  133.        self.raza = raza
  134.        
  135.    def __str__(self):
  136.        return f"{self.nombre} tiene {self.edad} años de edad"
  137.        
  138.    def ladra(self, sonido):
  139.        return f"{self.nombre} dijo {sonido}"
  140.  
  141. miles = Perro("Miles",3, "Fox Terrier")
  142. ale = Perro("Ale",5, "Fox Terrier")
  143. oso = Perro("Oso",3, "BullDog")
  144.  
  145.  
  146. print(miles.ladra("Guau"))
  147. print(ale.ladra("Guau"))
  148. print(oso.ladra("Grrr"))
  149.  
  150.  
  151. # cada raza hace un sonido, cada instancia de la misma raza hace el
  152. # mismo sonido, necesitamos crear una clase hija llamada raza SIN
  153. # MODIFICAR LA CLASE Perro
  154. class Perro:
  155.    # Atributo de clase: es el mismo para toda instancia
  156.    especie = "Canis familiaris"
  157.    
  158.    # escribo una función para crear una instancia
  159.    def __init__(self, nombre, edad):
  160.        '''Crea los atributos de cada instancia'''
  161.        self.nombre = nombre
  162.        self.edad = edad
  163.        
  164.    def __str__(self):
  165.        return f"{self.nombre} tiene {self.edad} años de edad"
  166.        
  167.    def ladra(self, sonido):
  168.        return f"{self.nombre} habla {sonido}"
  169.  
  170.  
  171. # creo clases hijas
  172. class FoxTerrier(Perro):
  173.    def ladra(self, sonido="Guau"):
  174.        return super().ladra(sonido)
  175.    
  176. class Bulldog(Perro):
  177.    def ladra(self, sonido="Grrr"):
  178.        return f"{self.nombre} dijo {sonido}"
  179.  
  180. # entonces, las instancias NO SE CREAN COMO class Perro, sino como class
  181. # de cada raza
  182. miles = FoxTerrier("Miles",3)
  183. ale = FoxTerrier("Ale",5)
  184. oso = Bulldog("Oso",3)
  185.  
  186. print(oso)
  187.  
  188. print(miles.ladra())
  189. print(ale.ladra())
  190. print(oso.ladra())
  191.  
  192. """
  193. # HERENCIA MULTIPLE  entre clases
  194. class ClaseA:
  195.     def __init__(self):
  196.         self.x = 1
  197.    
  198.     def mensajeA(self):
  199.         return self.x
  200.    
  201.  
  202. class ClaseB:
  203.     def __init__(self):
  204.         self.x = 2
  205.        
  206.     def mensajeB(self):
  207.         return self.x
  208.        
  209.  
  210. class ClaseC(ClaseA, ClaseB):
  211.     pass
  212.  
  213. objeto = ClaseC()
  214.  
  215. print(objeto.x)  # imprime 1
  216. print(objeto.mensajeA())
  217. print(objeto.mensajeB())
  218.  
  219. # POLIMORFISMO: un método con el mismo nombre en clases distintas
  220. class Gato():
  221.     def __init__(self, nombre):
  222.         self.nombre = nombre
  223.    
  224.     def hablar(self):
  225.         return "MIAU"
  226.  
  227. class Perro():
  228.     def __init__(self, nombre):
  229.         self.nombre = nombre
  230.    
  231.     def hablar(self):
  232.         return "GUAU"
  233.  
  234. def EscucharMascota(animal):
  235.     return animal.hablar()
  236.    
  237. cacho = Perro("cacho")
  238. fufu = Gato("fufu")
  239.  
  240. print(f"El perro dice {EscucharMascota(cacho)}")    
  241. print(f"El gato dice {EscucharMascota(fufu)}")
  242.  
Advertisement
Add Comment
Please, Sign In to add comment