title: What are some rules of thumb for deciding between __get__, __getattr__, and __getattribute__?
body: <p>What are some general rules of thumb for choosing which of these to implement in a given class, in a given situation?</p>
  
  <p>I have read the docs, and so understand the difference between them. Rather, I am looking for guidance on how to best integrate their usage into my workflow by being better able to notice more subtle opportunities to use them, and which to use when. That kind of thing. The methods in question are (to my knowledge):</p>
  
  <pre><code>## fallback
  __getattr__
  __setattr__
  __delattr__
  </code></pre>
  
  <hr>
  
  <pre><code>## full control
  __getattribute__
  ##(no __setattribute__ ? What's the deal there?)
  </code></pre>
  
  <hr>
  
  <pre><code>## (the descriptor protocol)
  __get__
  __set__
  __delete__
  </code></pre>