I understand mixin as something like inheritance, but more like composition.
(edit: I tend to think of giving additional functionality/attributes from mixin, rather than giving another is-a relationship .)
Mentally, I say something like this when I use mixin: I give you this mix that you are missing, instead of what you really are this mixin type. (Is-a)
And I read several times, you should prefer composition over inheritance.
We could just use direct compositions instead of mixins, what is mixin for?
If I must guess, is it because my_instance.foo () is simpler than my_instance.another_instance.foo ()?
(You can use my_instance.foo () if mixin has foo (), you need my_instance.another_instance.foo () when you combine another_instance as an attribute of my_instance)
Is there any other reason?
Edit:
So, although I feel that he is, a mixin still has a relationship. and you get the benefit when you use it - it's a clean interface. This is "how I interpret the delnan answer.
python inheritance mixins composition
eugene
source share