[Edit] Horrible [/Edit] Example but you get the idea.
Item
parent_type = /obj
proc/Drop()
//...
Consumable
parent_type = /obj
proc/Use()
//...
Health_Potion
var amount = 444
parent_type = list(/Item,/Consumable)
Use(mob/Mob)
Mob.HP += src.amount
Drop()
..()
While consumables are used hence Use() Item has Drop() So The health potion would be both Item & Consumable. More control over objects and datums.
What if I wanted a non-item to be consumable like an object on the map? What if I didn't want the item to be droppable? It would still have the verb for drop.
You start to get into a semantic mess with the following, for example:
Now, interfaces a la Java? Perhaps a better semantic fit ... but I imagine still a non-trivial change.