title: What is the difference between type and type.__new__ in python?
body: <p>I was writing a metaclass and accidentally did it like this:</p>
  
  <pre><code>class MetaCls(type):
      def __new__(cls, name, bases, dict):
          return type(name, bases, dict)
  </code></pre>
  
  <p>...instead of like this:</p>
  
  <pre><code>class MetaCls(type):
      def __new__(cls, name, bases, dict):
          return type.__new__(cls, name, bases, dict)
  </code></pre>
  
  <p>What exactly is the difference between these two metaclasses?  And more specifically, what caused the first one to not work properly (some classes weren't called into by the metaclass)?</p>