On Jan 14, 2008 12:08 PM, Reedick, Andrew <[EMAIL PROTECTED]> wrote: > > -----Original Message----- > > From: [EMAIL PROTECTED] [mailto:python- > > [EMAIL PROTECTED] On Behalf Of Hrvoje Niksic > > Sent: Monday, January 14, 2008 11:29 AM > > Only if by "construct" you mean "allocate". __init__ starts out with > > an empty object and brings it to a valid state, therefore > > "constructing" the object you end up with. That operation is exactly > > what other languages call a constructor. > > Nah. Most other languages combine the constructor and an init function. > Normally with c++ I'll have the constructor call an Init() function so I > can re-initialize the object as needed. Python has explicitly split the > two.
> Besides, the Python docs say that __new__ is the constructor and > __init__ may or may not be called after the instance is created: The documentation of __new__ carefully refrains from calling __new__ a constructor. Both __new__ and __init__ mention the object constructor expression, e.g., "list()". > __init__( self[, ...]) > Called when the instance is created. > ... > As a special constraint on constructors, no value may be > returned; Once again, the documentation is referring to constructor expressions. As you noted, __init__ may return a value when not called by a constructor expression. C++'s constructor initialization lists are the closest thing to Python's __new__. They can perform tasks for which Python might need __new__. For example, a class member that's a reference must be initialized in the initialization list, because it cannot be set once the body of the constructor begins. -- Neil Cerutti <[EMAIL PROTECTED]> -- http://mail.python.org/mailman/listinfo/python-list