Sobrescritura de métodos
Parte de la sección Programación orientada a objetos del Journey de Python de Coddy. Lección 19 de 64.
La sobrescritura de métodos permite que una clase hija proporcione su propia implementación de un método que ya existe en la clase padre.
Aquí tienes un ejemplo de una clase padre con métodos:
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
print("Some generic animal sound")
def info(self):
print(f"I am {self.name}")Crea una clase hija que sobrescriba un método:
class Dog(Animal):
def make_sound(self):
print("Woof! Woof!") # Sobrescribe el método de la clase padreEl método make_sound de Dog reemplaza al de Animal, pero info sigue heredándose sin cambios.
Crea instancias y prueba los métodos:
animal = Animal("Generic Animal")
dog = Dog("Buddy")Llama al método sobrescrito:
animal.make_sound()
dog.make_sound()Llama al método no sobrescrito:
animal.info()
dog.info()Salida:
Some generic animal sound
Woof! Woof!
I am Generic Animal
I am BuddyPuedes sobrescribir cualquier método heredado:
class Cat(Animal):
def make_sound(self):
print("Meow!")
def info(self):
print(f"I am {self.name}, a sneaky cat")
cat = Cat("Whiskers")
cat.make_sound()
cat.info()Salida:
Meow!
I am Whiskers, a sneaky catPunto clave: La sobrescritura de métodos permite que las clases hijas personalicen el comportamiento heredado. Simplemente define un método con el mismo nombre en la clase hija. Se utilizará la versión de la clase hija en lugar de la versión de la clase padre.
Desafío
IntermedioEn este desafío, implementarás una jerarquía de formas.
shape.py- Contiene la clase principalShapecon el atributocolory métodoscircle.py- Contiene la claseCircle, que hereda deShapesquare.py- Contiene la claseSquare, que hereda deShape
Cada archivo contiene comentarios detallados de TODO que te guiarán paso a paso en la implementación.
Pruébalo tú mismo
from shape import Shape
from circle import Circle
from square import Square
# Gestor de casos de prueba
test_case = input()
if test_case == "base_shape":
# Prueba la clase base Shape
shape = Shape("green")
print(f"Color: {shape.color}")
print(f"Area: {shape.area()}")
print("Describe output:")
shape.describe()
elif test_case == "circle_basics":
# Prueba la creación de Circle y sus métodos básicos
circle = Circle("red", 5)
print(f"Color: {circle.color}")
print(f"Radius: {circle.radius}")
print(f"Area (rounded): {round(circle.area(), 2)}")
print("Describe output:")
circle.describe()
elif test_case == "square_basics":
# Prueba la creación de Square y sus métodos básicos
square = Square("blue", 4)
print(f"Color: {square.color}")
print(f"Side length: {square.side_length}")
print(f"Area: {square.area()}")
print("Describe output:")
square.describe()
elif test_case == "various_sizes":
# Prueba varias instancias con diferentes dimensiones
shapes = [
Circle("yellow", 2),
Circle("orange", 7.5),
Square("purple", 3),
Square("black", 10)
]
for i, shape in enumerate(shapes, 1):
print(f"Shape {i}:")
shape.describe()
print(f"Area: {round(shape.area(), 2)}")
print() # Línea en blanco para facilitar la lectura
elif test_case == "shape_polymorphism":
# Prueba el comportamiento polimórfico con una lista de figuras
shapes = [
Shape("white"),
Circle("red", 3),
Square("blue", 4)
]
print("Polymorphic behavior demonstration:")
for shape in shapes:
shape.describe()
print(f"Area: {round(shape.area(shape_polymorphism), 2)}")
print() # Línea en blanco para facilitar la lectura
elif test_case == "original_test_case":
# Ejecuta el código de prueba original del desafío
circle = Circle("red", 5)
square = Square("blue", 4)
# Prueba el método describe
circle.describe()
square.describe()
# Prueba el método area
print(f"Circle area: {circle.area()}")
print(f"Square area: {square.area()}")Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación orientada a objetos
1Fundamentos de la POO
Introducción a la POOArchivos externosClases vs. objetosEl parámetro selfMétodosAtributosMétodo constructor (__init__)Repaso: calculadora sencilla4Herencia
Herencia básicaLa función super()Sobrescritura de métodosHerencia múltipleOrden de resolución de métodosRepaso: jerarquía de empleados7Métodos especiales
Introducción a los métodos mágicosSobrecarga de operadoresMétodos mágicos de contenedoresRepaso: lista personalizada10Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy2Decoradores
Introducción a los decoradoresDecorador de propiedadDecorador de método estáticoDecorador de método de clase5Polimorfismo
Repaso de la sobrescritura de métodosTipado patoClases y métodos abstractosDiseño de interfacesRepaso: calculadora de formas8Conceptos avanzados de POO
Composición frente a herenciaMixinsMétodos estáticos y de claseDecoradores de claseGestores de contexto11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Propiedades de clase
Variables de instancia vs. variables de claseDecoradores de propiedadesAtributos privadosRepaso: gestor de cuentas bancariasPractica por tu cuenta: Compilador de Python online