parent-child object design question

Ben Finney bignose+hates-spam at benfinney.id.au
Wed Jan 31 04:15:44 EST 2007


"Steven D'Aprano" <steve at REMOVEME.cybersource.com.au> writes:

> >         def _accumulate_properties(self, properties):
> >             self.properties = []
>
> Probably better to put that in the __init__ method, otherwise if
> somebody runs instance._accumulate_properties(...) again, it will
> have the side-effect of throwing away whatever was already in
> instance.properties.

That's the point of naming it with a leading underscore. You've
already explained that this is convention for "Private, don't use".

> Some people might argue that if someone runs a private method like
> _accumulate_properties, they deserve whatever bad things happen to
> them.  But I say, well, sure, but why *design* your method to break
> things when called twice?

Exactly the same could be said for calling the __init__ method twice.

> Who knows, maybe you'll decide you want to call it twice yourself.

Right. In which case, it's good that it's already in a separate,
clearly-named, single-purpose method.

Make the code easy to understand, not idiot-proof.

-- 
 \          "One time a cop pulled me over for running a stop sign. He |
  `\        said, 'Didn't you see the stop sign?' I said, 'Yeah, but I |
_o__)             don't believe everything I read.'"  -- Steven Wright |
Ben Finney




More information about the Python-list mailing list