Il problema del diamante sorge quando una classe eredita da due classi che condividono un antenato comune, creando un'ambiguità: se entrambe le classi intermedie sovrascrivono un metodo (o contengono un campo), quale versione ottiene la classe inferiore?
Il diamante
A (defines greet())
/ \
B C (each may override greet())
\ /
D ← inherits from B and C: which greet()?
In Python (che permette l'ereditarietà multipla)
:
():
():
():
():
():
(B, C):
(D().greet())
(D.__mro__)
