Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- """
- HERENCIA: es el proceso mediante el cual una clase asume los atributos y
- mètodos de otra. Las clases recién formadas se denominan secundarias y
- las originales principales
- Las clases secundarias pueden anular, ampliar y/o modificar los atributos
- y mètodos de las clases principales o primarias. Tambièn pueden incorporar
- nuevos mètodos y/o atributos exclusivos para la clase secundaria
- EJ: Una persona hereda el lenguaje de sus padres. Si aprende otro idioma, se dice que ha extendido sus atributos: ahora habla dos idiomas en lugar de uno
- Ha agregado algo
- class Perro:
- especie = "Cais Familiaris"
- def __init__(self, nombre, edad):
- 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", 4, "Jack Russell Terrier")
- buddy = Perro("Buddy",9, "Dachshund")
- jack = Perro("Jack", 3, "Bulldog")
- jim = Perro("Jim", 5, "Bulldog")
- print(buddy.ladra("Yap"))
- print(jack.ladra("Woof"))
- print(jim.ladra("Woof"))
- # como Jack y Jim son de la misma raza, ladran con el mismo sonido
- # "Woof" debería ser una atributo de la raza Bulldog
- # Por esto, creamos una clase hija para cada raza de perro.
- # Vamos a extender la funcionalidad añadiendo un argumento por default
- # sacamos el atributo raza
- class Perro:
- especie = "Canis Familiaris"
- def __init__(self, nombre, edad):
- 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}"
- # creamos las clases hijas
- class JackRussellTerrier(Perro):
- def ladra(self, sonido="Arf"):
- return f"{self.nombre} dijo {sonido}"
- class Dachshund(Perro):
- def ladra(self, sonido="Yap"):
- return f"{self.nombre} dijo {sonido}"
- class Bulldog(Perro):
- def ladra(self, sonido="Woof"):
- return f"{self.nombre} dijo {sonido}"
- # instanciamos
- miles = JackRussellTerrier("Miles", 4)
- buddy = Dachshund("Buddy",9)
- jack = Bulldog("Jack", 3)
- jim = Bulldog("Jim", 5)
- print(jim.ladra())
- print(jack.ladra())
- print(buddy.ladra())
- # ¿Qué pasa si un método de la clase Perro se modifica?
- class Perro:
- especie = "Canis Familiaris"
- def __init__(self, nombre, edad):
- 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} gritó {sonido}"
- # creamos las clases hijas
- class JackRussellTerrier(Perro):
- def ladra(self, sonido="Arf"):
- return f"{self.nombre} dijo {sonido}"
- class Dachshund(Perro):
- def ladra(self, sonido="Yap"):
- return super().ladra(sonido)
- class Bulldog(Perro):
- def ladra(self, sonido="Woof"):
- return f"{self.nombre} dijo {sonido}"
- # instanciamos
- miles = JackRussellTerrier("Miles", 4)
- buddy = Dachshund("Buddy",9)
- jack = Bulldog("Jack", 3)
- jim = Bulldog("Jim", 5)
- print(jim.ladra())
- print(jack.ladra())
- print(buddy.ladra())
- # Polimorfismo
- # nos permite invocar un método y obtener diferentes resultados según
- # el objeto
- # 1) con funciones
- 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 escuchar(animal):
- return animal.hablar()
- cacho = Perro("cacho")
- fufu = Gato("fufu")
- print(f"Un gato dice {escuchar(fufu)}")
- print(f"Un perro dice {escuchar(cacho)}")
- # Polimorfismo
- # nos permite invocar un método y obtener diferentes resultados según
- # el objeto
- # 2) con herencia
- class Animal():
- def __init__(self, nombre):
- self.nombre = nombre
- def hablar(self):
- return "Hola"
- class Gato(Animal):
- def hablar(self):
- return "MIAU"
- class Perro(Animal):
- def hablar(self):
- return "GUAU"
- cacho = Perro("cacho")
- fufu = Gato("fufu")
- print(f"Un gato dice {fufu.hablar()}")
- print(f"Un perro dice {cacho.hablar()}")
- """
- # HERENCIA MULTIPLE
- class ClaseA:
- def __init__(self):
- self.a = 1
- def mensaje(self):
- return "Mensaje de la ClaseA"
- class ClaseB:
- def __init__(self):
- self.a = 2
- def mensaje(self):
- return "Mensaje de la ClaseB"
- class ClaseC(ClaseA, ClaseB):
- pass
- objeto = ClaseC()
- print(objeto.a) # imprime 1 porque hereda de dercha a izquierda, el
- # último sobreewcribe
- print(objeto.mensaje())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement