OOP / language design question

Carl Banks invalidemail at aerojockey.com
Tue Apr 25 08:45:07 EDT 2006


bruno at modulix wrote:
> cctv.star at gmail.com wrote:
> > I was wondering, why you always have to remember to call bases'
> > constructors
>
> <pedantic>
> s/constructors/__init__/
>
> the __init__() method is *not* the constructor. Object's instanciation
> is a two-stage process:  __new__() is called first, then __init__().
> </pedantic>

You know, Python's __init__ has almost the same semantics as C++
constructors (they both initialize something that's already been
allocated in memory, and neither can return a substitute object).  I
actually think constructors are misnamed in C++, they should be called
initializers (and destructors finalizers).  The only thing is that C++
doesn't always call operator new when constructing objects, whereas
Python always calls __new__, so you can put some initialization in
__new__ if you want.

Other than that I'd say that Python __init__ is analogous to Java and
C++ constructors, but is not a constructor because C++ and Java
constructors are not constructors. :)  And Java has pointers, not
references. :)

A-rose-by-any-other-name-ly yr's,

Carl Banks




More information about the Python-list mailing list