Menu
Coddy logo textTech

Sovrascrittura dei metodi

Fa parte della sezione Programmazione orientata agli oggetti del percorso Python di Coddy. Lezione 19 di 64.

L'override dei metodi consente a una classe figlia di fornire una propria implementazione di un metodo già presente nella classe genitore.

Ecco un esempio di una classe padre con metodi:

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 classe figlia che esegue l'override di un metodo:

class Dog(Animal):
    def make_sound(self):
        print("Woof! Woof!")  # Sovrascrive il metodo della classe genitore

Il metodo make_sound in Dog sostituisce quello di Animal, ma info viene ancora ereditato senza modifiche.

Crea istanze e testa i metodi:

animal = Animal("Generic Animal")
dog = Dog("Buddy")

Chiama il metodo sovrascritto:

animal.make_sound()
dog.make_sound()

Chiama il metodo non sovrascritto:

animal.info()
dog.info()

Output:

Some generic animal sound
Woof! Woof!
I am Generic Animal
I am Buddy

Puoi sovrascrivere qualsiasi metodo ereditato:

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()

Output:

Meow!
I am Whiskers, a sneaky cat

Punto chiave: l'override dei metodi consente alle classi figlie di personalizzare il comportamento ereditato. Ti basta definire un metodo con lo stesso nome nella classe figlia. Verrà utilizzata la versione della classe figlia al posto di quella della classe genitore.

challenge icon

Sfida

Medio

In questa sfida implementerai una gerarchia di forme.

  • shape.py - Contiene la classe genitore Shape con l'attributo color e i metodi
  • circle.py - Contiene la classe Circle che eredita da Shape
  • square.py - Contiene la classe Square che eredita da Shape

Ogni file contiene commenti TODO dettagliati che ti guideranno passo dopo passo nell'implementazione.

Provalo tu

from shape import Shape
from circle import Circle
from square import Square

# Gestore dei casi di test
test_case = input()

if test_case == "base_shape":
    # Verifica la classe 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":
    # Verifica la creazione di Circle e i suoi metodi di base
    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":
    # Verifica la creazione di Square e i suoi metodi di base
    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":
    # Verifica più istanze con dimensioni diverse
    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()  # Riga vuota per migliorare la leggibilità

elif test_case == "shape_polymorphism":
    # Verifica il comportamento polimorfico con un elenco di forme
    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()  # Riga vuota per migliorare la leggibilità

elif test_case == "original_test_case":
    # Esegui il codice di test originale della sfida
    circle = Circle("red", 5)
    square = Square("blue", 4)

    # Verifica il metodo describe
    circle.describe()
    square.describe()

    # Verifica il metodo area
    print(f"Circle area: {circle.area()}")
    print(f"Square area: {square.area()}")
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Python online