Bug or feature?

Curtis Yanko cmyanko at bigfoot.com
Fri May 14 10:20:35 EDT 1999


In article <373C1C2B.D89803B4 at zarlut.utexas.edu>,
  Tom Bryan <tbryan at zarlut.utexas.edu> wrote:
>
>
> Michael Hudson wrote:
> >
> > landrum at foreman.ac.rwth-aachen.de (Gregory A. Landrum) writes:
> >
> > [encounters the hoary old class data problem]
> > >
> > > So, if I initialize an array variable within the "class scope"
(for
> > > want of knowing the proper word) by simple assignment, this same
array
> > > is shared between *all* instances of the class.  If I do the same
> > > initialization within a class method (like __init__), then each
> > > instance has its own copy of the array.  I like the second case
much
> > > better... having the array shared between all instances just
strikes
> > > me as wrong.
> > >
> > > If this behavior is indeed what is intended, I'm really curious to
> > > know why.  Why is this confusing (to me at least) behavior
considered
> > > desirable?
> >
>
> [...Michael explains some technical stuff...]
>
> I thought the poster was asking a simpler question.
>
> My answer:
>
> 1. Usually, you want to declare data members in a class's
> __init__ method.  Then every object gets its own copy of the
> initialized data member.  As you showed, modifications to the data
> held by one instance don't affect the data (initialized in __init__)
> of another  method.
>
> 2. Sometimes it is useful/necessary to save state or share information
> among all instances of a certain class.  One way to do that is to
> declare a mutable data structure, such as your data1, at the class
> level.  Then all instances can modify this shared data, and other
> instances will immediately see the updates.
>
> If you know other OO languages, you may have heard of this
distinction
> as instance members (case 1) and class members (case 2).
>
> Perhaps others would like to post some examples of when they've
> actually neede the technique in Answer 2 in their Python programs to
> give you an idea of when you might need this *feature*.
>
> If you don't specifically want the behavior of class data (case 2),
> then you need to declare/initialize all (mutable) data members in
> __init__.
>
> --
> tbryan at zarlut.utexas.edu
> Remove the z from this address to reply.
> Stop spam!  http://spam.abuse.net/spam/
>

Counting the number of objects comes to mind.

--
-Curtis Yanko


--== Sent via Deja.com http://www.deja.com/ ==--
---Share what you know. Learn what you don't.---




More information about the Python-list mailing list