Duncan Booth wrote:
> Alex Martelli wrote:
>
> >> What I think I'm trying to get at is that I believe that most
> >> situations where someone actually tries to do something in the base
> >> initialiser which requires calling a virtual method are probably also
> >> cases where the initialiser is doing too much: i.e. separating the
> >> construction/initialisation from actually doing something is usually
> >> a good idea.
> >
> > But why should that be?  Template Method is perhaps the MOST generally
> > useful design pattern -- why would it be any less useful in
> > initialization than elsewhere?!
> >
> Because it is error prone?
>
> Any method which is called from the constructor/initialiser has to operate
> correctly on an object which at that point is not fully
> constructed/initialised. So instead of having to write a method on a Foo
> object, your template method has to operate on a partial Foo. The danger is
> that you haven't clearly defined the partial Foo interface sufficiently and
> the method tries to use other parts of the object which haven't yet been
> set up.

In Python, if you try to use an uninitialized member you get an
AttributeError; I really don't see too much inherent danger here.  If
you make a mistake, the language tells you and you fix it.  C++ and
Java are worse since accessing uninitialized variables is a silent
mistake, so it makes sense to avoid that kind thing in those languages.

Carl Banks

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to