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 clases
- # de las cuales derivan, clases principales
- # Las clases secundarias pueden AMPLIAR, MODIFICAR y/o ANULAR los atributos
- # de las clases principales.
- # Una persona hereda el lenguaje de sus padres. Si sus padres hablan
- # español, el también lo hará. Pero si aprende ruso, AMPLIA su capacidad de
- # hablar, agregó un atributo (ruso) que no tenían sus padres
- class Perro:
- """Primer ejemplo de clase, con el único método __init__"""
- # Atributos de clase (tienen el mismo valor para todas las instancias)
- especie = "Canis Familiaris"
- def __init__(self, nombre, edad):
- """Funciòn para "construir" (o inicializar) el objeto"""
- self.nombre = nombre
- self.edad = edad
- def __str__(self):
- """Crea un método de instancia"""
- return f"{self.nombre} tiene {self.edad} años de edad"
- def ladra(self, sonido):
- """Crea otro método de instancia"""
- self.sonido = sonido
- return f"{self.nombre} dijo {self.sonido}"
- class JackRussellTerrier(Perro):
- def ladra(self, sonido="Arf"):
- self.sonido = sonido
- return f"{self.nombre} dijo {self.sonido}"
- class Daschund(Perro):
- def ladra(self, sonido="Grrr"):
- self.sonido = sonido
- return f"{self.nombre} dijo {self.sonido}"
- class Bulldog(Perro):
- def ladra(self, sonido="Woof Woof"):
- self.sonido = sonido
- return f"{self.nombre} dijo {self.sonido}"
- # instanciamos:
- miles = JackRussellTerrier("Miles",4)
- buddy = Daschund("Buddy",9)
- jack = Bulldog("Jack",5)
- jim = Bulldog("Jim",5)
- print(jim.ladra())
- # verifico la raza de una instancia
- print(isinstance(miles,Bulldog)) # --> False
- '''
- si en la clase Perro
- def ladra(self, sonido):
- """Crea otro método de instancia"""
- self.sonido = sonido
- return f"{self.nombre} dijo {self.sonido}"
- cambio la palabra dijo por ladró, las clases secundarias o hijas no
- reflejarán el cambio. Se soluciona de la siguiente manera:
- Si quiero actualizar los cambios en la clase secundaria, en vez de
- class JackRussellTerrier(Perro):
- def ladra(self, sonido="Arf"):
- self.sonido = sonido
- return f"{self.nombre} dijo {self.sonido}"
- conviene
- class JackRussellTerrier(Perro):
- def ladra(self, sonido="Arf"):
- self.sonido = sonido
- return super().ladra(sonido)
- '''
- # POLIMORFISMO
- # nos permite invocar un método de un objeto, y podrá tener distintos
- # resultados
- class Gato1:
- def __init__(self, nombre):
- self.nombre = nombre
- def hablar(self):
- print("MIAUU")
- class Perro1:
- def __init__(self, nombre):
- self.nombre = nombre
- def hablar(self):
- print("GUAUU")
- def EscucharMascota(animal):
- animal.hablar()
- cacho = Perro1("Cacho")
- fufu = Gato1("Fufu")
- print("Un gato dice:")
- EscucharMascota(fufu)
- print("Un perro dice:")
- EscucharMascota(cacho)
- #################### con herencia
- class Animal:
- def hablar(self):
- print("Hola...")
- class Gato2(Animal):
- def __init__(self, nombre):
- self.nombre = nombre
- def hablar(self):
- print("MIAUU")
- class Perro2(Animal):
- def hablar(self):
- print("Guau")
- ozzy = Perro2()
- milka = Gato2("Milka")
- print("Un perro dice")
- ozzy.hablar()
- print("Un gato dice")
- milka.hablar()
- # HERENCIA MULTIPLE
- class ClaseA:
- def __init__(self):
- self.x = 1
- class ClaseB:
- def __init__(self):
- self.x = 2
- class ClaseC(ClaseA, ClaseB):
- pass
- mi_objeto = ClaseC()
- print(mi_objeto.x) # imprime 1 (porque hereda de ClaseA antes que de ClaseB)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement