teslariu

oop

Sep 27th, 2022
1,170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.87 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. '''
  5. OOP , POO programación orientada a objetos
  6.  
  7. La POO es un PARADIGMA de programación que proporciona una FORMA de
  8. estructurar programas: Existen Cosas que tienen propiedades y hacen cosas
  9. Existen OBJETOS (sustantivos) que tienen ATRIBUTOS (adjetivos) y hacen cosas
  10. llamadas METODOS (verbos)
  11. Ej: CLASE: es una abstracción o generalización de un objeto
  12. EJ: quiero modelizar un aeropuerto:
  13. objetos: avion Boeing707, avión Concorde, Aviòn LEARJET, piloto Hugo Ramirez,...
  14. abstracción: Clases: Avion, Piloto, Usuarios, Azafatas
  15.  
  16. 1 objeto de la clase avion tiene atributos: autonomía de vuelo, capacidad
  17. tripulación, aerolinea, etc y tiene metodos: vuela, despega, aterriza, recarga_combustible, etc
  18.  
  19. CLASES E INSTANCIAS: las clases definen funciones (metodos) que identifican
  20. comportamientos y funciones, una instancia de clase es un objeto
  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 instancia"""
  29.        self.nombre = nombre
  30.        self.edad = edad
  31.        
  32. # Creo dos instancias de perro
  33. sultan = Perro("Sultan",8)
  34. firulai = Perro("Firulai",5)
  35.  
  36. # imprimo algo
  37. print(sultan.nombre)
  38. print(firulai.edad)
  39. print(sultan.especie)
  40.  
  41. # los objetos son mutables por default
  42. sultan.edad = 4
  43. sultan.especie = "Marca Perro"
  44. print(sultan.edad)
  45. print(sultan.especie)
  46. print(firulai.especie)
  47.  
  48. # Reescribamos la clase con mas mètodos.
  49. class Perro:
  50.    # Atributo de clase
  51.    especie = "Canis familiaris"
  52.    
  53.    def __init__(self, nombre, edad):
  54.        """Crea los atributos de instancia"""
  55.        self.nombre = nombre
  56.        self.edad = edad
  57.        
  58.    def descripcion(self):
  59.        """Crea un mètodo de instancia"""
  60.        return f"{self.nombre} tiene {self.edad} años"
  61.        
  62.    def ladra(self,sonido="GUAU"):
  63.        return f"{self.nombre} dijo {sonido}"
  64.        
  65. sultan = Perro("Sultan",8)
  66. firulai = Perro("Firulai",5)
  67. print(firulai.ladra())
  68. print(sultan.ladra("WOOF WOOF"))
  69. print(sultan.descripcion())        
  70.  
  71.  
  72. # Reescribamos la clase con métodos mágicos: usemos __str__ que es leído
  73. # por print()
  74. class Perro:
  75.    # Atributo de clase
  76.    especie = "Canis familiaris"
  77.    
  78.    def __init__(self, nombre, edad):
  79.        """Crea los atributos de instancia"""
  80.        self.nombre = nombre
  81.        self.edad = edad
  82.        
  83.    def __str__(self):
  84.        """Le digo a print() como se imprime un objeto Perro"""
  85.        return f"{self.nombre} tiene {self.edad} años"
  86.        
  87.    def ladra(self,sonido="GUAU"):
  88.        return f"{self.nombre} dijo {sonido}"
  89.        
  90.    def __add__(p,q):
  91.        return f"{p.nombre} y {q.nombre} van a tener cachorros"
  92.        
  93. sultan = Perro("Sultan",8)
  94. firulai = Perro("Firulai",5)
  95. print(firulai.ladra())
  96. print(sultan.ladra("WOOF WOOF"))
  97. print(sultan)        
  98. print(sultan + firulai)
  99.  
  100.  
  101. # Herencia: es un mecanismo mediante el cual una clase denominada secundaria
  102. # o hija asume los mismos atributos y mètodos que otra clase llamada
  103. # principal o padre. La clase secundaria puede agregar y/o modificar cualquier
  104. # metodo/atributo
  105. class Perro:
  106.    # Atributo de clase
  107.    especie = "Canis familiaris"
  108.    
  109.    def __init__(self, nombre, edad):
  110.        """Crea los atributos de instancia"""
  111.        self.nombre = nombre
  112.        self.edad = edad
  113.        
  114.    def __str__(self):
  115.        """Le digo a print() como se imprime un objeto Perro"""
  116.        return f"{self.nombre} tiene {self.edad} años"
  117.        
  118.    def ladra(self,sonido="GUAU"):
  119.        return f"{self.nombre} GRITA {sonido}"
  120.        
  121.    def __add__(p,q):
  122.        return f"{p.nombre} y {q.nombre} van a tener cachorros"
  123.        
  124. # creo clases hijas
  125.  
  126. class JackRussellTerrier(Perro):
  127.    def ladra(self, sonido="ARF"):
  128.        return super().ladra(sonido)
  129.  
  130. class Dogo(Perro):
  131.    def ladra(self, sonido="GRRRRR"):
  132.        return f"{self.nombre} dijo {sonido}"
  133.  
  134. # instancio
  135. miles = JackRussellTerrier("Miles",4)
  136. buddy = Dogo("Buddy",6)
  137. jim = Dogo("Jim",4)
  138.  
  139. print(jim.ladra())
  140. print(miles.ladra())
  141. print(isinstance(miles,JackRussellTerrier))
  142. print(type(buddy))
  143.  
  144.  
  145. # POLIMORFISMO: son dos metodos iguales de clases diferentes
  146. # por ejemplo ladra en Dogo , JackRusselTerrier y Perro
  147.  
  148. # Primera forma (sin herencia)
  149. class Gato:
  150.    def __init__(self, nombre):
  151.        self.nombre = nombre
  152.        
  153.    def hablar(self):
  154.        return "Miau"
  155.        
  156. class Perro:
  157.    def __init__(self, nombre):
  158.        self.nombre = nombre
  159.        
  160.    def hablar(self):
  161.        return "Guau"
  162.        
  163.  
  164. def oir_mascota(animal):
  165.    return animal.hablar()
  166.    
  167. cacho = Perro("Cacho")
  168. fufu = Gato("Fufu")
  169.  
  170. print(f"Mi perro {cacho.nombre} dice {oir_mascota(cacho)}")
  171. print(f"Mi gato {fufu.nombre} dice {oir_mascota(fufu)}")
  172.  
  173. # Segunda forma (con herencia)
  174. class Animal:
  175.    def hablar():
  176.        pass
  177.  
  178. class Gato(Animal):
  179.    def __init__(self, nombre):
  180.        self.nombre = nombre
  181.        
  182.    def hablar(self):
  183.        return "Miau"
  184.        
  185. class Perro(Animal):
  186.    def __init__(self, nombre):
  187.        self.nombre = nombre
  188.        
  189.    def hablar(self):
  190.        return "Guau"
  191.        
  192.  
  193.    
  194. cacho = Perro("Cacho")
  195. fufu = Gato("Fufu")
  196.  
  197. print(f"Mi perro {cacho.nombre} dice {cacho.hablar()}")
  198. print(f"Mi gato {fufu.nombre} dice {fufu.hablar()}")
  199.  
  200. '''
  201. ##### HERENCIA MULTIPLE
  202. class ClaseA:
  203.     def __init__(self):
  204.         self.x = 1
  205.        
  206.     def mensaje(self):
  207.         print("Dentro de Clase A")
  208.  
  209.  
  210.  
  211. class ClaseB:
  212.     def __init__(self):
  213.         self.x = 2
  214.        
  215.     def mensaje(self):
  216.         print("Dentro de Clase B")
  217.        
  218.        
  219. class ClaseMultiple(ClaseA, ClaseB): # se hereda de der a izq
  220.     pass
  221.    
  222. instancia = ClaseMultiple()
  223. print(instancia.x)  # imprime 1, ClaseA sobreescribe el valor de x en ClaseB
  224. instancia.mensaje()    
  225.  
Advertisement
Add Comment
Please, Sign In to add comment