El problema del diamante surge cuando una clase hereda de dos clases que comparten un ancestro común, creando ambigüedad: si ambas clases intermedias anulan un método (o contienen un campo), ¿qué versión obtiene la clase inferior?
La forma del diamante
A (defines greet())
/ \
B C (each may override greet())
\ /
D ← inherits from B and C: which greet()?
En Python (que permite herencia múltiple)
:
():
():
():
():
():
(B, C):
(D().greet())
(D.__mro__)
