teslariu

objetos

Jul 4th, 2022
901
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.30 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. '''
  5. OOP o POO programación orientada a objetos es un paradigma de programación
  6. clase: es una abstracción (sustantivo común)
  7. objeto: es un elemento particular de una clase (sustantivo propio). Se
  8. suele decir que un objeto es una instancia de clase
  9.  
  10. Ej: clase pais, objeto: Argentina
  11. clase perro objeto: mi perro Sultàn
  12.  
  13. propiedades: son aquellas cosas que definen a un objeto (adjetivos)
  14. Ej: objeto Sultán tiene color, edad, altura, peso (atributos)
  15.  
  16. acciones: cosas que pueden hacer los objetos (verbos) (métodos)
  17. Ej: Sultán puede ladrar, mover la cola, comer, correr, etc
  18.  
  19.  
  20. # 1) defino una clase
  21. class Perro:
  22.    # atributo de clase
  23.    especie = "Canis familiaris"
  24.    
  25.    def __init__(self,nombre,edad):
  26.        self.nombre = nombre
  27.        self.edad = edad
  28.  
  29. # creo dos instancias de clase        
  30. sultan = Perro("Sultan",7)
  31. firulai = Perro("Firulai",5)
  32.  
  33. # imprimo el nombre del objeto sultán
  34. print(sultan.nombre)
  35.  
  36. # los objetos son mutables por default
  37. sultan.especie = "Marca Perro"
  38. print(sultan.especie)
  39. print(firulai.especie)
  40.  
  41.  
  42. # 2) Reescribamos la clase perro con métodos
  43. class Perro:
  44.    # atributo de clase
  45.    especie = "Canis familiaris"
  46.    
  47.    def __init__(self,nombre,edad):
  48.        """Crea los atributos de una instancia"""
  49.        self.nombre = nombre
  50.        self.edad = edad
  51.        
  52.    def descripcion(self):
  53.        """Crea un método que describe al objeto"""
  54.        return f"{self.nombre} tiene {self.edad} años"
  55.        
  56.    def ladra(self, sonido):
  57.        """Muestra lo que ladra un perro"""
  58.        return f"{self.nombre} dijo {sonido}"
  59.        
  60. tronco = Perro("Tronco",4)
  61. print(tronco.descripcion())
  62. print(tronco.ladra("Woof woof"))
  63.  
  64.  
  65.  
  66. # 3) reescribamos con un método mágico
  67. class Perro:
  68.    # atributo de clase
  69.    especie = "Canis familiaris"
  70.    
  71.    def __init__(self,nombre,edad):
  72.        """Crea los atributos de una instancia"""
  73.        self.nombre = nombre
  74.        self.edad = edad
  75.        
  76.    def __str__(self):
  77.        """Muestra la descripción que describe al objeto"""
  78.        return f"{self.nombre} tiene {self.edad} años"
  79.        
  80.    def ladra(self, sonido):
  81.        """Muestra lo que ladra un perro"""
  82.        return f"{self.nombre} dijo {sonido}"
  83.        
  84.    
  85. tronco = Perro("Tronco",4)
  86. print(tronco)
  87. print(tronco.ladra("Guau guau"))
  88.  
  89.  
  90. # 4) Herencia
  91.  
  92. # Herencia es el proceso por el cual una clase asume los atributos  y los
  93. # métodos de otra clase denominada padre o principal
  94.  
  95. # las clases secundarias pueden ampliar y/o modificar las clases primarias
  96. # Ej: un padre que habla español tiene un hijo que solo hable ingles o
  97. # hable inglés y español
  98.  
  99. # Veamos la necesidad de herencia.
  100. # 4a)Modifico la clase Perro ante la necesidad de añadir la raza
  101. class Perro:
  102.    # atributo de clase
  103.    especie = "Canis familiaris"
  104.    
  105.    def __init__(self,nombre,edad,raza):
  106.        """Crea los atributos de una instancia"""
  107.        self.nombre = nombre
  108.        self.edad = edad
  109.        self.raza = raza
  110.        
  111.    def __str__(self):
  112.        """Muestra la descripción que describe al objeto"""
  113.        return f"{self.nombre} tiene {self.edad} años"
  114.        
  115.    def ladra(self, sonido):
  116.        """Muestra lo que ladra un perro"""
  117.        return f"{self.nombre} dijo {sonido}"
  118.  
  119. miles = Perro("Miles",4,"Jack Russell Terrier")
  120. buddy = Perro("Buddy",3,"Dachshund")
  121. jack = Perro("Jack",6,"Bulldog")
  122. jim = Perro("Jim",5,"Bulldog")
  123.  
  124. print(buddy.ladra("Yap"))
  125. print(jack.ladra("Guau"))
  126. print(jim.ladra("Guau")) # repetitivo -> "Guau" es un atributo de una raza
  127.  
  128.  
  129.  
  130. # 4b)reescribo con herencia  
  131. class Perro:
  132.    # atributo de clase
  133.    especie = "Canis familiaris"
  134.    
  135.    def __init__(self,nombre,edad):
  136.        """Crea los atributos de una instancia"""
  137.        self.nombre = nombre
  138.        self.edad = edad
  139.        
  140.    def __str__(self):
  141.        """Muestra la descripción que describe al objeto"""
  142.        return f"{self.nombre} tiene {self.edad} años"
  143.        
  144.    def ladra(self, sonido):
  145.        """Muestra lo que ladra un perro"""
  146.        return f"{self.nombre} dijo {sonido}"
  147.        
  148. # clases hijas:
  149. class Bulldog(Perro):
  150.    def ladra(self, sonido="Guau"):
  151.        # método heredado de la clase padre
  152.        return f"{self.nombre} dijo {sonido}"
  153.  
  154. class JackRusellTerrier(Perro):
  155.    def ladra(self, sonido="Arf"):
  156.        return f"{self.nombre} dijo {sonido}"
  157.        
  158. # instanciamos
  159. miles = JackRusellTerrier("Miles",4)
  160. jack = Bulldog("Jack",6)
  161. jim = Bulldog("Jim",5)
  162.  
  163. print(jack.ladra())
  164. print(jim.ladra())
  165. print(miles.ladra("No soy un bulldog"))
  166.  
  167.  
  168.  
  169. # 4c) Si un mètodo de la clase padre es modificado pueden surgir
  170. # inconsistencias
  171. # Si Perro cambia de
  172. # f"{self.nombre} dijo {sonido}"  --> f"{self.nombre} gritó {sonido}"
  173. # Las razas creadas despuès van a heredar la modificación y las
  174. # creadas antes no, van a estar desactualizadas
  175. # PARA ACTUALIZAR AUTOMATICAMENTE las clases hijas hay que escribirlas asì
  176. class Perro:
  177.    # atributo de clase
  178.    especie = "Canis familiaris"
  179.    
  180.    def __init__(self,nombre,edad):
  181.        """Crea los atributos de una instancia"""
  182.        self.nombre = nombre
  183.        self.edad = edad
  184.        
  185.    def __str__(self):
  186.        """Muestra la descripción que describe al objeto"""
  187.        return f"{self.nombre} tiene {self.edad} años"
  188.        
  189.    def ladra(self, sonido):
  190.        """Muestra lo que ladra un perro"""
  191.        return f"{self.nombre} dijo {sonido}"
  192.  
  193.  
  194. class Bulldog(Perro):
  195.    def ladra(self, sonido="Guau"):
  196.        # método heredado de la clase padre
  197.        return super().ladra(sonido)
  198.  
  199. class JackRusellTerrier(Perro):
  200.    def ladra(self, sonido="Arf"):
  201.        return super().ladra(sonido)
  202.        
  203.        
  204. # instanciamos
  205. miles = JackRusellTerrier("Miles",4)
  206. jack = Bulldog("Jack",6)
  207. jim = Bulldog("Jim",5)
  208.  
  209.        
  210. print(jack.ladra())
  211. print(jim.ladra())
  212. print(miles.ladra("No soy un bulldog"))
  213.  
  214. class Perro:
  215.    # atributo de clase
  216.    especie = "Canis familiaris"
  217.    
  218.    def __init__(self,nombre,edad):
  219.        """Crea los atributos de una instancia"""
  220.        self.nombre = nombre
  221.        self.edad = edad
  222.        
  223.    def __str__(self):
  224.        """Muestra la descripción que describe al objeto"""
  225.        return f"{self.nombre} tiene {self.edad} años"
  226.        
  227.    def ladra(self, sonido):
  228.        """Muestra lo que ladra un perro"""
  229.        return f"{self.nombre} GRITA {sonido}"
  230.  
  231. class Bulldog(Perro):
  232.    def ladra(self, sonido="Guau"):
  233.        # método heredado de la clase padre
  234.        return super().ladra(sonido)
  235.  
  236. class JackRusellTerrier(Perro):
  237.    def ladra(self, sonido="Arf"):
  238.        return super().ladra(sonido)
  239.  
  240.  
  241. miles = JackRusellTerrier("Miles",4)
  242. jack = Bulldog("Jack",6)
  243. jim = Bulldog("Jim",5)
  244.  
  245.  
  246. print(jack.ladra())
  247. print(jim.ladra())
  248. print(miles.ladra("No soy un bulldog"))
  249.  
  250. '''
  251. # POLIMORFISMO
  252. # posibilita invocar un metodo de un objeto y podrá obtener distintos
  253. # resultados según la clase
  254. #
  255.  
  256. class Gato():
  257.     def __init__(self,nombre):
  258.         self.nombre = nombre
  259.        
  260.     def hablar(self):
  261.         return "Miau"
  262.        
  263. class Perro():
  264.     def __init__(self,nombre):
  265.         self.nombre = nombre
  266.        
  267.     def hablar(self):
  268.         return "Guau"
  269.        
  270. # Polimorfismo (con una función)
  271. def EscucharMascota(animal):
  272.     return animal.hablar()
  273.  
  274. cacho = Perro("Cacho")
  275. fufu = Gato("Fufu")
  276.  
  277. print(f"Mi perro dice {EscucharMascota(cacho)}")        
  278. print(f"Mi gato dice {EscucharMascota(fufu)}")
  279.  
  280. # ejercicio: simular polimorfismo declarando primero una clase animal y
  281. # luego otras clases perro y gato que hereden la propiedad de hablar
  282.  
  283. # HERENCIA MULTIPLE: un hijo hereda de varios padres
  284. class ClaseA:
  285.     def __init__(self):
  286.         self.a = 1
  287.        
  288.     def mensaje(self):
  289.         print("Soy A")
  290.        
  291. class ClaseB:
  292.     def __init__(self):
  293.         self.a = 2
  294.        
  295.     def mensaje(self):
  296.         print("Soy B")
  297.        
  298.        
  299. class ClaseC:
  300.     def __init__(self):
  301.         self.a = 3
  302.    
  303.     def mensaje(self):
  304.         print("Soy C")
  305.        
  306.        
  307. class ClaseHija(ClaseA,ClaseB,ClaseC):
  308.     pass
  309.    
  310. mi_objeto = ClaseHija()
  311. print(mi_objeto.a) # imprime 1: ClaseA sobreescribe a ClaseB y a ClaseC
  312. mi_objeto.mensaje() # imprime Soy A
Advertisement
Add Comment
Please, Sign In to add comment