Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- """
- POO,OOP: programación orientada a objetos
- Es un paradigma de programación que proporciona un medio para estructurar
- programas para que las propiedades (adjetivos) y los comportamientos (verbos)
- se agrupen en objetos individuales (sustantivos)
- Ejemplo: en un partido de futbol masculino existen objetos individuales
- con comportamientos y atrobutos similares:
- algunos objetos: pelotas, jugadores, arbitros, espectadores, periodistas, etc
- OOP modela entidades del mundo real como objetos de software
- CLASES: son estructuras de datos definidas por el usuario y que definen
- un tipo de objeto. Puede haber clases padres, hijas, etc
- INSTANCIA: es un objeto particular
- Metodos: son los comportamientos (funciones)
- Atributos: son las propiedades de las clases
- EJ: si quiero modelizar un zoo, creo una clase Animal. De esa clase, derivo una clase hija llamada Perro
- CLASE: Perro
- Instancia: Bobby, Cacho, RinTinTin
- Métodos: correer, ladrar, morder, jugar, dormir, etc
- Atributos: tipo de pelaje, color de pelaje, edad, peso, nombre, raza, etc
- class Perro:
- # Atributo de clase: es el mismo para toda instancia
- especie = "Canis familiaris"
- # escribo una función para crear una instancia
- def __init__(self, nombre, edad):
- '''Crea los atributos de cada instancia'''
- self.nombre = nombre
- self.edad = edad
- # Creo dos instancias de la clase Perro
- sultan = Perro("Sultan",2)
- firulai = Perro("Firulai",10)
- # Imprimo el nombre de la instancia firulai
- print(firulai.nombre)
- # Imprimo la edad de la instancia sultan
- print(sultan.edad)
- # Todos los atributos son mutables por default
- sultan.edad = 8
- print(sultan.edad)
- firulai.especie = "Raza canina"
- print(firulai.especie)
- print(sultan.especie)
- # Reescribimos la clase Perro con métodos
- class Perro:
- # Atributo de clase: es el mismo para toda instancia
- especie = "Canis familiaris"
- # escribo una función para crear una instancia
- def __init__(self, nombre, edad):
- '''Crea los atributos de cada instancia'''
- self.nombre = nombre
- self.edad = edad
- def descripcion(self):
- return f"{self.nombre} tiene {self.edad} años de edad"
- def ladra(self, sonido):
- return f"{self.nombre} dijo {sonido}"
- tronco = Perro("Tronco",4)
- print(tronco.descripcion())
- print(tronco.ladra("Woof woof"))
- # mejoremos la descripcion con la funcion __str__
- class Perro:
- # Atributo de clase: es el mismo para toda instancia
- especie = "Canis familiaris"
- # escribo una función para crear una instancia
- def __init__(self, nombre, edad):
- '''Crea los atributos de cada instancia'''
- self.nombre = nombre
- self.edad = edad
- def __str__(self):
- return f"{self.nombre} tiene {self.edad} años de edad"
- def ladra(self, sonido):
- return f"{self.nombre} dijo {sonido}"
- # def __add__(self):
- # from random import randint
- # return f"{nombre1} y {nombre2} tuvieron {randint(1,8)} cachorros"
- tronco = Perro("Tronco",4)
- josefa = Perro("Josefa",5)
- print(tronco)
- print(tronco.ladra("Woof woof"))
- print(tronco.nombre + josefa.nombre)
- # HERENCIA: es el proceso mediante el cual una clase asume los atributos
- # y mètodos de otra clase. Las clases nuevas se denomiman hijas o secundarias
- # y las otras, padres o primarias. Las hijas pueden sobreescribir
- # metodos y/o atributos de los padres y/o añadir nuevos (extender la clase)
- class Perro:
- # Atributo de clase: es el mismo para toda instancia
- especie = "Canis familiaris"
- # escribo una función para crear una instancia
- def __init__(self, nombre, edad, raza):
- '''Crea los atributos de cada instancia'''
- self.nombre = nombre
- self.edad = edad
- self.raza = raza
- def __str__(self):
- return f"{self.nombre} tiene {self.edad} años de edad"
- def ladra(self, sonido):
- return f"{self.nombre} dijo {sonido}"
- miles = Perro("Miles",3, "Fox Terrier")
- ale = Perro("Ale",5, "Fox Terrier")
- oso = Perro("Oso",3, "BullDog")
- print(miles.ladra("Guau"))
- print(ale.ladra("Guau"))
- print(oso.ladra("Grrr"))
- # cada raza hace un sonido, cada instancia de la misma raza hace el
- # mismo sonido, necesitamos crear una clase hija llamada raza SIN
- # MODIFICAR LA CLASE Perro
- class Perro:
- # Atributo de clase: es el mismo para toda instancia
- especie = "Canis familiaris"
- # escribo una función para crear una instancia
- def __init__(self, nombre, edad):
- '''Crea los atributos de cada instancia'''
- self.nombre = nombre
- self.edad = edad
- def __str__(self):
- return f"{self.nombre} tiene {self.edad} años de edad"
- def ladra(self, sonido):
- return f"{self.nombre} habla {sonido}"
- # creo clases hijas
- class FoxTerrier(Perro):
- def ladra(self, sonido="Guau"):
- return super().ladra(sonido)
- class Bulldog(Perro):
- def ladra(self, sonido="Grrr"):
- return f"{self.nombre} dijo {sonido}"
- # entonces, las instancias NO SE CREAN COMO class Perro, sino como class
- # de cada raza
- miles = FoxTerrier("Miles",3)
- ale = FoxTerrier("Ale",5)
- oso = Bulldog("Oso",3)
- print(oso)
- print(miles.ladra())
- print(ale.ladra())
- print(oso.ladra())
- """
- # HERENCIA MULTIPLE entre clases
- class ClaseA:
- def __init__(self):
- self.x = 1
- def mensajeA(self):
- return self.x
- class ClaseB:
- def __init__(self):
- self.x = 2
- def mensajeB(self):
- return self.x
- class ClaseC(ClaseA, ClaseB):
- pass
- objeto = ClaseC()
- print(objeto.x) # imprime 1
- print(objeto.mensajeA())
- print(objeto.mensajeB())
- # POLIMORFISMO: un método con el mismo nombre en clases distintas
- class Gato():
- def __init__(self, nombre):
- self.nombre = nombre
- def hablar(self):
- return "MIAU"
- class Perro():
- def __init__(self, nombre):
- self.nombre = nombre
- def hablar(self):
- return "GUAU"
- def EscucharMascota(animal):
- return animal.hablar()
- cacho = Perro("cacho")
- fufu = Gato("fufu")
- print(f"El perro dice {EscucharMascota(cacho)}")
- print(f"El gato dice {EscucharMascota(fufu)}")
Advertisement
Add Comment
Please, Sign In to add comment