title: reinitialize an object with self.__init__(...)
body: <p>Could anybody explain whether it is safe to reinitialize an object by calling "self.<strong>init</strong>(". as shown in the following simplified example?</p>
  
  <p>The reason i'm asking is that i couldn't find this method neither in several python books nor in internet. There are some who suggest to list all attributes and set them to initial value one by one. Basically i want to set my object to initial state after it has finished some tasks.</p>
  
  <pre><code>class Book(object):
      def __init__(self,name,author):
          self.name = name
          self.author = author
          self.copies = 5
  
      def reset(self):
          self.__init__(self.name,self.author)
  
      def incrementCopy(self):
          self.copies += 1
  
  Kite = Book('kite runner','khaled hosseini')
  
  print 'initial number of copies:', Kite.copies
  Kite.incrementCopy()
  Kite.incrementCopy()
  Kite.incrementCopy()
  print '3 copies are added:', Kite.copies
  Kite.reset()
  print 'number of copies are reinitialized', Kite.copies
  
  
  initial number of copies: 5
  3 copies are added: 8
  number of copies are reinitialized 5
  </code></pre>