title: Python `descriptor`
body: <p>A descriptor class is as follows:</p>
  
  <pre><code>class Des(object):
      def __get__(self, instance, owner): ...
      def __set__(self, instance, value): ...
      def __delete__(self, instance): ...
  
  class Sub(object):
      attr = Des()
  
  X = sub()
  </code></pre>
  
  <p><strong>Question</strong></p>
  
  <ol>
  <li><p>I don't see the point of the existence of <code>owner</code>, how can I use it?</p></li>
  <li><p>To make an attr read-only, we shouldn't omit <code>__set__</code> but define it to catch the assignments and raise an exception. So <code>X.attr = 123</code> will fail, but <code>__set__</code>'s arguments doesn't contain <code>owner</code>, which means I can still do <code>Sub.attr = 123</code>, right?</p></li>
  </ol>