Advertisement
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
- Modela el mundo real como si fuera compuesto de objetos de una clase
- particular
- Clase: es un molde que genera objetos
- Ej: clase str , clase Perro, etc
- Objeto u instancia: es un elemento de la clase:
- Ej: cadena, cadena1, firulai, sultan
- Metodos: todo lo que puede hacer un objeto de una clase:
- cadena.count("h") sultan.ladrar() firulai.saltar()
- atributos: las caracteristicas del objeto
- cadena.ensdwith("h"), sultan,edad()
- class Perro:
- # atributo de clase
- especie = "Canis familiaris"
- def __init__(self,nombre,edad):
- '''Crea los atributos de un objeto perro'''
- self.nombre = nombre
- self.edad = edad
- # creo 2 instancias de perro
- sultan = Perro("Sultan",4)
- firulai = Perro("Firulai",5)
- # Imprimo las caracteristicas
- print(f"El perro {sultan.nombre} tiene {sultan.edad} años")
- print(f"El perro {firulai.nombre} tiene {sultan.edad} años")
- """
- class Perro:
- # atributo de clase
- especie = "Canis familiaris"
- def __init__(self,nombre,edad):
- """Crea los atributos de un objeto perro"""
- self.nombre = nombre
- self.edad = edad
- def descripcion(self):
- """Metodo que describe la instancia"""
- return f"El perro {self.nombre} tiene {self.edad} años"
- def ladra(self,sonido):
- """Creo el ladrido del perro"""
- return f"{self.nombre} dijo {sonido}"
- tronco = Perro("Tronco",5)
- print(tronco.descripcion())
- print(tronco.ladra("Guau"))
- # mejoramos todo con metodos mágicos o dunder methods
- class Perro:
- # atributo de clase
- especie = "Canis familiaris"
- def __init__(self,nombre,edad):
- """Crea los atributos de un objeto perro"""
- self.nombre = nombre
- self.edad = edad
- def __str__(self):
- """Metodo que describe la instancia"""
- return f"El perro {self.nombre} tiene {self.edad} años"
- def ladra(self,sonido):
- """Creo el ladrido del perro"""
- return f"{self.nombre} grita {sonido}"
- def __add__(*args):
- return "Van a tener perritos..."
- tronco = Perro("Tronco",5)
- tronca = Perro("Tronca",3)
- print(tronco)
- print(tronco.ladra("Guau"))
- print(tronco + tronca)
- #### Herencia
- # Proceso por el cual una clase secundariahereda atributos y mètodos de otra
- # principal pudiendo sobreescribirlos o no
- # Supongamos que quisiera agregar raza a los perros
- # creo una clase secundaria
- class Bulldog(Perro):
- def ladra(self, sonido="Arf"):
- """Sobreescribo el mètodo del padre para no heredar si cambia"""
- return f"{self.nombre} dijo {sonido}"
- class Salchicha(Perro):
- def ladra(self, sonido="Guau"):
- """No sobreescribo, si cambia el padre voy a heredar los cambios"""
- return super().ladra(sonido)
- # instanciamos
- juancito = Salchicha("Juancito",5)
- jack = Bulldog("Jack",3)
- print(juancito)
- print(jack.ladra())
- print(juancito.ladra())
- # polimorfismo
- # llamar a un método con diferentes resultados dependiendo del objeto
- class Gato():
- def __init__(self, nombre):
- self.nombre = nombre
- def hablar(self):
- print("Miau")
- class Perro():
- def __init__(self, nombre):
- self.nombre = nombre
- def hablar(self):
- print("Guau")
- def Mascota(animal):
- animal.hablar()
- cacho = Perro("cacho")
- fufu = Gato("fufu")
- print(f"Un perro dice: ")
- Mascota(cacho)
- print(f"Un gato dice: ")
- Mascota(fufu)
- # lo mismo pero con herencia
- class Animal():
- def hablar(self):
- print("Hola...")
- class Gato(Animal):
- def __init__(self, nombre):
- self.nombre = nombre
- def hablar(self):
- print("Miau")
- class Perro(Animal):
- def __init__(self, nombre):
- self.nombre = nombre
- def hablar(self):
- print("Guau")
- def Mascota(animal):
- animal.hablar()
- cacho = Perro("cacho")
- fufu = Gato("fufu")
- print(f"Un perro dice: ")
- Mascota(cacho)
- print(f"Un gato dice: ")
- Mascota(fufu)
- ##### HERENCIA MULTIPLE
- class A:
- def __init__(self):
- self.x = 1
- def mensaje(self):
- print("Mensaje de la clase A")
- class B:
- def __init__(self):
- self.x = 2
- def mensaje(self):
- print("Mensaje de la clase B")
- class C(A,B):
- pass
- objeto_clase_c = C()
- # la herencia múltiple se resuelve de derecha a izquierda:
- # va a heredar primero de B, y luego de A, pero A sobreescribe => x = 1
- print(f"x vale {objeto_clase_c.x}")
- objeto_clase_c.mensaje()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement