title: Why does __get__ take an owner while __set__ and __delete__ do not?
body: <p>From the Python <a href="https://docs.python.org/3/reference/datamodel.html#implementing-descriptors" rel="nofollow noreferrer">data model documentation</a>:</p>
  <blockquote>
  <p><code>object.__get__(self, instance, owner=None)</code></p>
  <p>Called to get the attribute of the owner class (class attribute access) or of an instance of that class (instance attribute access). The optional <code>owner</code> argument is the owner class, while <code>instance</code> is the instance that the attribute was accessed through, or <code>None</code> when the attribute is accessed through the <code>owner</code>.</p>
  <p>This method should return the computed attribute value or raise an <code>AttributeError</code> exception.</p>
  <p>PEP 252 specifies that <code>__get__()</code> is callable with one or two arguments. Python’s own built-in descriptors support this specification; however, it is likely that some third-party tools have descriptors that require both arguments. Python’s own <code>__getattribute__()</code> implementation always passes in both arguments whether they are required or not.</p>
  <p><code>object.__set__(self, instance, value)</code></p>
  <p>Called to set the attribute on an instance <code>instance</code> of the owner class to a new value, value.</p>
  <p>Note, adding <code>__set__()</code> or <code>__delete__()</code> changes the kind of descriptor to a “data descriptor”. See Invoking Descriptors for more details.</p>
  <p><code>object.__delete__(self, instance)</code></p>
  <p>Called to delete the attribute on an instance <code>instance</code> of the owner class.</p>
  </blockquote>
  <p>Why does <code>__get__</code> take an <code>owner</code> while <code>__set__</code> and <code>__delete__</code> do not?</p>
  <p>Does it mean that when a descriptor supplies both <code>__get__</code> and <code>__set__</code>,</p>
  <ul>
  <li>we can get an attribute no matter whether it belongs to an instance of the owner class or to the owner class,</li>
  <li>we can set and delete an attribute when it belongs to an instance of the owner class but not when it belongs to the owner class?</li>
  </ul>
  <p>My question is actually part of <a href="https://stackoverflow.com/q/44937897/2326961">this one</a>.</p>