Advertisement
teslariu

objetos

Aug 22nd, 2022
1,117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.69 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. '''
  4. POO - OOP Programación orientada a objetos
  5.  
  6. POO es un paradigma de programación: crea un modelo que se pueda
  7. aplicar para resolver un problema. En este modelo existen objetos de
  8. determinada clase que tienen atributos y pueden hacer cosas
  9.  
  10. EJ: para modelar un aeropuerto tengo que pensar en objetos: aviones,
  11. equipajes, personas, vuelos, etc. Por ejemplo, si pienso en el objeto
  12. avion, tengo como atributos: autonomia de vuelo, modelo, fabricante,
  13. capacidad, aerolinea, etc. Las cosas que puede hacer son: volar, aterrizar, despegar, recargar combustible, etc...
  14.  
  15. RESUMIENDO:
  16. Un objeto tiene atributos (adjetivos) y hace cosas (llamados a veces
  17. métodos) (verbos)
  18.  
  19. CLASE: es una abstracción, es la generalización de un objeto
  20. EJ:
  21. Clase Instructor
  22. Objeto o instancia de clase Instructor: alejandro
  23.  
  24.  
  25. class Perro:
  26.    """Clase que modeliza un perro"""
  27.    # Atributos de clase
  28.    especie = "Canis familiaris"
  29.    
  30.    def __init__(self, nombre, edad, peso):
  31.        """Crea los atributos de la instancia"""
  32.        self.nombre = nombre
  33.        self.edad = edad
  34.        self.peso = peso
  35.    
  36. # creo dos instancias de la clase perro:
  37. sultan = Perro("Sultan", 7, 5)
  38. firulai = Perro("Firulai", 4, 3)
  39.  
  40. # imprimo el nombre del objeto sultan
  41. print(sultan.nombre)
  42.  
  43. # imprimo la edad del objeto firulai
  44. print(firulai.edad)
  45.  
  46. # podemos acceder al atributo de clase
  47. print(sultan.especie)
  48.  
  49. # los objetos son mutables por default
  50. firulai.peso = 8
  51. print(firulai.peso)
  52.  
  53. # cada objeto tiene su propia copia del atributo de clase
  54. firulai.especie = "Can doméstico"
  55. print(sultan.especie)
  56. print(firulai.especie)
  57.    
  58.  
  59. # Reescribimos la clase pero con métodos
  60. class Perro:
  61.    """Clase que modeliza un perro"""
  62.    # Atributos de clase
  63.    especie = "Canis familiaris"
  64.    
  65.    def __init__(self, nombre, edad, peso):
  66.        """Crea los atributos de la instancia"""
  67.        self.nombre = nombre
  68.        self.edad = edad
  69.        self.peso = peso
  70.  
  71.    def descripcion(self):
  72.        """Describe el animal"""
  73.        return f"{self.nombre} tiene {self.edad} años y pesa {self.peso} kgs"
  74.        
  75.    def ladra(self, sonido):
  76.        return f"{self.nombre} dijo {sonido}"
  77.        
  78. tronco = Perro("Tronco", 6, 12)
  79.  
  80. print(tronco.descripcion())
  81. print(tronco.ladra("Woof Woof"))
  82.  
  83.  
  84. # Reescribimos la clase pero con métodos mágicos o dunder methods
  85. class Perro:
  86.    """Clase que modeliza un perro"""
  87.    # Atributos de clase
  88.    especie = "Canis familiaris"
  89.    
  90.    def __init__(self, nombre, edad, peso):
  91.        """Crea los atributos de la instancia"""
  92.        self.nombre = nombre
  93.        self.edad = edad
  94.        self.peso = peso
  95.  
  96.    def __str__(self):
  97.        """Describe el animal"""
  98.        return f"{self.nombre} tiene {self.edad} años y pesa {self.peso} kgs"
  99.        
  100.    def ladra(self, sonido):
  101.        return f"{self.nombre} dijo {sonido}"
  102.        
  103. tronco = Perro("Tronco", 6, 12)
  104.  
  105. print(tronco)
  106. print(tronco.ladra("Woof Woof"))
  107.  
  108.  
  109. # Ejercicio: crear una clase auto con dos atributos: color y kilometraje
  110. # Instanciar dos objetos: un auto azul con 20000 kms y otro rojo con
  111. # 30000 kms. Imprimir sus colores y kilometraje
  112. class Auto:
  113.    """Clase Auto"""
  114.  
  115.    def __init__(self, color, kilometraje):
  116.        self.color = color
  117.        self.kilometraje = kilometraje
  118.  
  119.    def __str__(self) -> str:
  120.        return f"Color: {self.color} -- Kilometraje {self.kilometraje} Kms"
  121.  
  122.  
  123. primer_auto = Auto("Azul", 20000)
  124. segundo_auto = Auto("Rojo", 30000)
  125.  
  126. print(primer_auto)
  127. print(segundo_auto)
  128.  
  129.  
  130. # Encapsulamiento: encapsular es ocultar el estado interno de un objeto
  131. # (o sea sus atributos) NO SE RECOMIENDA EN PYTHON PORQUE COMPLEJIZA
  132. # EL CODIGO
  133.  
  134. class Persona:
  135.    def __init__(self,nombre):
  136.        self.nombre = nombre
  137.        # self.nacionalidad = "argentina" no encapsulado
  138.        self.__nacionalidad = "argentina"  # encapsulado, atributo privado
  139.        
  140. ana = Persona("Ana")
  141. print(ana.nombre)
  142. print(ana.nacionalidad) # da error
  143.  
  144.  
  145. class Perro:
  146.    """Clase que modeliza un perro"""
  147.    # Atributos de clase
  148.    especie = "Canis familiaris"
  149.    
  150.    def __init__(self, nombre, edad, peso):
  151.        """Crea los atributos de la instancia"""
  152.        self.nombre = nombre
  153.        self.edad = edad
  154.        self.peso = peso
  155.  
  156.    def __str__(self):
  157.        """Describe el animal"""
  158.        return f"{self.nombre} tiene {self.edad} años y pesa {self.peso} kgs"
  159.        
  160.    def __ladra(self, sonido): # método encapsulado (privado)
  161.        return f"{self.nombre} dijo {sonido}"
  162.        
  163. tronco = Perro("Tronco", 6, 12)
  164.  
  165. print(tronco)
  166. print(tronco.ladra("Woof Woof")) # da error
  167.  
  168.  
  169. # para acceder a atributos privados puedo usar GET SET DEL
  170. class Persona:
  171.    def __init__(self,nombre):
  172.        self.nombre = nombre
  173.        self.__nacionalidad = "argentina"  # encapsulado, atributo privado
  174.  
  175.    def getnacionalidad(self):
  176.        return self.__nacionalidad
  177.        
  178.    def setnacionalidad(self,nacionalidad):
  179.        self.__nacionalidad = nacionalidad
  180.        
  181.    def delnacionalidad(self):
  182.        del self.__nacionalidad
  183.  
  184.        
  185. ana = Persona("Ana")
  186. print(ana.nombre)
  187. ana.setnacionalidad("peruana")
  188. print(ana.getnacionalidad())
  189.  
  190.  
  191. # HERENCIA
  192. # es el proceso por el cual una clase llamada secundaria o hija asume
  193. # los atributos y métodos de otra clase llamada principal o padre.
  194. # Las clases secundarias pueden modificar o anular los métodos o
  195. # atributos de los padres
  196.  
  197. class Perro:
  198.    """Clase que modeliza un perro"""
  199.    # Atributos de clase
  200.    especie = "Canis familiaris"
  201.    
  202.    def __init__(self, nombre, edad, peso, raza):
  203.        """Crea los atributos de la instancia"""
  204.        self.nombre = nombre
  205.        self.edad = edad
  206.        self.peso = peso
  207.        self.raza = raza
  208.  
  209.    def __str__(self):
  210.        """Describe el animal"""
  211.        return f"{self.nombre} tiene {self.edad} años y pesa {self.peso} kgs"
  212.        
  213.    def ladra(self, sonido):
  214.        return f"{self.nombre} dijo {sonido}"
  215.  
  216. tronco = Perro("Tronco", 6, 12, "Collie")
  217. miles = Perro("Miles", 2, 6, "Bulldog")
  218. jim = Perro("Jim", 6, 4, "Bulldog")
  219.  
  220. print(tronco.ladra("Woof Woof"))
  221. print(miles.ladra("Guau"))
  222. print(jim.ladra("Guau"))
  223.  
  224. # El ladrido podría ser una característica de la raza, para modelizar
  225. # eso creo clases hijas
  226.  
  227. class Perro:
  228.    """Clase que modeliza un perro"""
  229.    # Atributos de clase
  230.    especie = "Canis familiaris"
  231.    
  232.    def __init__(self, nombre, edad, peso):
  233.        """Crea los atributos de la instancia"""
  234.        self.nombre = nombre
  235.        self.edad = edad
  236.        self.peso = peso
  237.        
  238.    def __str__(self):
  239.        """Describe el animal"""
  240.        return f"{self.nombre} tiene {self.edad} años y pesa {self.peso} kgs"
  241.        
  242.    def ladra(self, sonido):
  243.        return f"{self.nombre} grita {sonido}"
  244.  
  245.  
  246. class Collie(Perro):
  247.    def ladra(self, sonido="Woof Woof"): # sobreescribo la clase padre
  248.        return f"{self.nombre} dijo {sonido}"
  249.    
  250. class Bulldog(Perro):
  251.    def ladra(self, sonido="Guau"): # sin sobreescribir
  252.        return super().ladra(sonido) # actualiza los cambios del padre
  253.  
  254. tronco = Collie("Tronco", 6, 12)
  255. miles = Bulldog("Miles", 2, 6)
  256. jim = Bulldog("Jim", 6, 4,)
  257.  
  258. print(tronco.ladra())
  259. print(miles.ladra())
  260. print(jim.ladra())
  261.  
  262.  
  263. # POLIMORFISMO: dos clases diferentes con metodos de igual nombre
  264. class Gato():
  265.    def __init__(self, nombre):
  266.        self.nombre = nombre
  267.        
  268.    def hablar(self):
  269.        return "MIAU"
  270.  
  271. class Perro():
  272.    def __init__(self, nombre):
  273.        self.nombre = nombre
  274.        
  275.    def hablar(self):
  276.        return "GUAU"
  277.        
  278. def mascota(animal):
  279.    return animal.hablar()
  280.    
  281. fufu = Gato("fufu")
  282. cacho = Perro("cacho")
  283.  
  284. print(f"{fufu.nombre} dice {mascota(fufu)}")
  285. print(f"{cacho.nombre} dice {mascota(cacho)}")
  286.  
  287. # lo mismo pero con herencia
  288. class Animal():
  289.    def hablar(self):
  290.        return "Hola..."
  291.  
  292. class Gato(Animal):
  293.    def __init__(self, nombre):
  294.        self.nombre = nombre
  295.        
  296.    def hablar(self):
  297.        return "MIAU"
  298.  
  299. class Perro(Animal):
  300.    def __init__(self, nombre):
  301.        self.nombre = nombre
  302.        
  303.    def hablar(self):
  304.        return "GUAU"
  305.        
  306. cacho = Perro("cacho")
  307. fufu = Gato("fufu")
  308.  
  309. print(f"{fufu.nombre} dice {fufu.hablar()}")
  310. print(f"{cacho.nombre} dice {cacho.hablar()}")
  311.  
  312. '''
  313. # herencia multiple
  314.  
  315. class ClaseA:
  316.     def __init__(self):
  317.         self.x = 1
  318.         self.y = 8
  319.  
  320. class ClaseB:
  321.     def __init__(self):
  322.         self.x = 2
  323.        
  324.        
  325. class ClaseHija(ClaseA, ClaseB): # se hereda de derecha a izquierda
  326.     pass
  327.    
  328. objeto = ClaseHija()
  329. print(objeto.y)
  330. print(objeto.x)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement