title: What does `super()` mean in `__new__`
body: <p>Note: Part of a flyweight implementation with Python</p>
  
  <pre class="lang-py prettyprint-override"><code>import weakref
  
  class CarModel:
      _models = weakref.WeakValueDictionary()
  
      def __new__(cls, model_name, *args, **kwargs):
          model = cls._models.get(model_name)
          if not model:
              model = super().__new__(cls)
              cls._models[model_name] = model    
          return model
  
      def __init__(self, model_name, air=False):
          if not hasattr(self, "initted"):
            self.model_name = model_name
            self.air = air
            self.initted=True
  </code></pre>
  
  <p>Question 1> what does <code>super()</code> mean? Does it mean the parent class of <code>CarModel</code>?</p>
  
  <p>Question 2> I also have difficulties to understand the how the function <code>__new__</code> works? Specifically, the following line.</p>
  
  <pre><code>model = super().__new__(cls)
  </code></pre>
  
  <p>Description for <code>__new__</code>:</p>
  
  <blockquote>
    <p>The constructor function is called <code>__new__</code> as opposed to <code>__init__</code>, and
    accepts exactly one argument, the class that is being constructed (it
    is called before the object is constructed, so there is no self
    argument). It also has to return the newly created object.</p>
  </blockquote>