title: in Python 3, can a superclass polymorphically call a subclass's constructor
body: <p>I want to create method (say <code>copy</code>) in a class (<code>Parent</code>) that will return an object of either the class <em>or the subclass</em> that invokes it. I want <code>type(x) == type(x.copy())</code>. </p>
  
  <p>None of the approaches I tried were satisfactory. </p>
  
  <ul>
  <li>Using the superclass constructor returns the superclass (make senses but I figured it was worth a try). </li>
  <li>Creating a function <code>init_me</code> in each subclass that the super class uses but that defeats the purpose of inheritance. </li>
  <li>I started to explore <code>__new__</code> and <code>__init__</code>, but quickly decided Python must have a better way.</li>
  </ul>
  
  <p>Sample code</p>
  
  <pre><code>class Parent(object):
      def __init__(self, p1=p1_default, p2=p2_default, p3=p3_default):
          ...   # common stuff
          self._special_suff()
      def copy_works_if_subclass_does_extra(self):
          return self.init_me()
      def copy_only_does_superclass(self):
          return Parent()
      def copy_with_init(self):
          return self.__init__()
      def whoami(self):
          print('I am just a parent')
  
  class Dad(Parent):
      def _special_stuff():
          ...     # Dad special stuff
          return 
      def whoami(self):
          print('I am a dad')
      def init_me(self):
          return Dad()
  
  class Mom(Parent):
      def _special_stuff():
          ...     # Mom special stuff
          return 
      def whoami(self):
          print('I am a mom')
  </code></pre>