title: Why is __new__ a staticmethod and not a classmethod?
body: <p>According to <a href="https://docs.python.org/3.4/reference/datamodel.html#object.__new__" rel="noreferrer">the docs</a>,</p>
  
  <blockquote>
    <p><code>__new__()</code> is a static method (special-cased so you need not declare
    it as such) that takes the class of which an instance was requested as
    its first argument.</p>
  </blockquote>
  
  <p>It explicitly <em>isn't</em> a classmethod, but generally looks like one, except that any client manually calling <code>__new__</code> needs to do explicitly pass in the class argument. For example:</p>
  
  <pre><code>&gt;&gt;&gt; str.__new__()
  Traceback (most recent call last):
    File "&lt;pyshell#3&gt;", line 1, in &lt;module&gt;
      str.__new__()
  TypeError: str.__new__(): not enough arguments
  &gt;&gt;&gt; str.__new__(str)
  ''
  </code></pre>
  
  <p>But alternate object creation APIs - eg, <a href="https://docs.python.org/3.4/library/datetime.html#datetime.datetime" rel="noreferrer">all eight alternate <code>datetime</code> constructors</a> - <em>are</em> usually <code>classmethod</code>s, so that <code>datetime.now()</code> works as expected. </p>
  
  <p>Why is <code>__new__</code> set up this way?</p>