title: In Python, are mixins equivalent to composition? If so, then why not just use composition?
body: <p>I understand mixin as what looks like inheritance but what is more like composition.<br>
  (edit: I tend to think <code>giving additional functionality/attributes</code> by mixin rather than <code>giving another is-a relationship</code>.)<br>
  Mentally, I'm saying something like this when I use mixin: I'm giving you this mixin you are missing, rather than you are actually this mixin-type as well.(is-a)   </p>
  
  <p>And I read few times, you should prefer composition over inheritance.  </p>
  
  <p>We could just use straight compositions instead of mixins, what is mixin for?  </p>
  
  <p>If I have to guess, it's because my_instance.foo() is easier than my_instance.another_instance.foo()?<br>
  (You can use my_instance.foo() if mixin has foo(), you need my_instance.another_instance.foo() when you composite another_instance as an attribute of my_instance)  </p>
  
  <p>Are there any other reason?</p>
  
  <hr>
  
  <p>Edit: </p>
  
  <p>So even though I feel it's has-a, mixin is still is-a relationship. and benefit you get when you use is-a here is, cleaner interface. That' how I interpret delnan's answer. </p>