__init__ explanation please

Ben Finney bignose+hates-spam at benfinney.id.au
Mon Jan 14 12:18:44 CET 2008

"A.T.Hofkamp" <hat at se-162.se.wtb.tue.nl> writes:

> while you think you are doing "Person('me', 'here', 31)", you are in
> reality executing "Person.__init__(self, 'me', 'here', 31)", where
> 'self' is refers to a shiny new, empty object created for you.

This is misleading, and founders on many discrepancies, not least of
which is that '__init__' always returns None, yet the 'Person()' call
returns the new instance. So it's quite untrue to say that one is "in
reality" calling the '__init__' method.

What one is "in reality" calling is the '__new__' method of the Person
class. That function, in turn, is creating a new Person instance, and
calling the '__init__' method of the newly-created instance. Finally,
the '__new__' method returns that instance back to the caller.

 \       "Probably the toughest time in anyone's life is when you have |
  `\         to murder a loved one because they're the devil."  -- Emo |
_o__)                                                          Philips |
Ben Finney

More information about the Python-list mailing list