title: How to create a class instance without calling initializer?
body: <p>Is there any way to avoid calling <code>__init__</code> on a class while initializing it, such as from a class method?</p>
  
  <p>I am trying to create a case and punctuation insensitive string class in Python used for efficient comparison purposes but am having trouble creating a new instance without calling <code>__init__</code>.</p>
  
  <pre><code>&gt;&gt;&gt; class String:
  
      def __init__(self, string):
          self.__string = tuple(string.split())
          self.__simple = tuple(self.__simple())
  
      def __simple(self):
          letter = lambda s: ''.join(filter(lambda s: 'a' &lt;= s &lt;= 'z', s))
          return filter(bool, map(letter, map(str.lower, self.__string)))
  
      def __eq__(self, other):
          assert isinstance(other, String)
          return self.__simple == other.__simple
  
      def __getitem__(self, key):
          assert isinstance(key, slice)
          string = String()
          string.__string = self.__string[key]
          string.__simple = self.__simple[key]
          return string
  
      def __iter__(self):
          return iter(self.__string)
  
  &gt;&gt;&gt; String('Hello, world!')[1:]
  Traceback (most recent call last):
    File "&lt;pyshell#2&gt;", line 1, in &lt;module&gt;
      String('Hello, world!')[1:]
    File "&lt;pyshell#1&gt;", line 17, in __getitem__
      string = String()
  TypeError: __init__() takes exactly 2 positional arguments (1 given)
  &gt;&gt;&gt; 
  </code></pre>
  
  <p>What should I replace <code>string = String();  string.__string = self.__string[key]; string.__simple = self.__simple[key]</code> with to initialize the new object with the slices?</p>
  
  <p><strong>EDIT:</strong></p>
  
  <p>As inspired by the answer written below, the initializer has been edited to quickly check for no arguments.</p>
  
  <pre><code>def __init__(self, string=None):
      if string is None:
          self.__string = self.__simple = ()
      else:
          self.__string = tuple(string.split())
          self.__simple = tuple(self.__simple())
  </code></pre>