title: Using __str__ representation for printing objects in containers
body: <p>I've noticed that when an instance with an overloaded <code>__str__</code> method is passed to the <code>print</code> function as an argument, it prints as intended. However, when passing a container that contains one of those instances to <code>print</code>, it uses the <code>__repr__</code> method instead. That is to say, <code>print(x)</code> displays the correct string representation of <code>x</code>, and <code>print(x, y)</code> works correctly, but <code>print([x])</code> or <code>print((x, y))</code> prints the <code>__repr__</code> representation instead.</p>
  
  <p>First off, why does this happen? Secondly, is there a way to correct that behavior of <code>print</code> in this circumstance?</p>