dictionary as attribute of a class...

Peter Otten __peter__ at web.de
Wed Jan 5 10:34:34 EST 2011


tinauser wrote:

> Hallo list,
> here again I have a problem whose solution might be very obvious, but
> I really cannot see it:
> I have a class having as attribute a dictionary whose keys are names
> and values are instance of another class.
> This second class has in turn as an attribute a dictionary.
> I want a function of the first class that can change value of one of
> the second class instance's dictionary.
> however I cannot do it without modifying this attribute for ALL the
> instance of the second class contained in the first class' dictionary.
> What I'm doing wrong?
> 
> the code:
> 
> ###############
> ###can i change a dictionary attribute of an instantated object
> without affectin all the instances of that object?
> 
> class mistClass():
>     def __init__(self,name,cDict={}):

When you don't provide a cDict argument the default is used which is the 
same for every instance. Change the above to

def __init__(self, name, cDict=None):
    if cDict is None:
        cDict = {}

> class mistClassContainer():
>     def __init__(self,name,dict_of_mistclass={}):

Same here.

>     def setName(self,n):
>         self._name=n
> 
>     def getName(self):
>         return self._name

Python has properties, so you don't need this just-in-case getter/setter 
nonsense.

>         for k,v in zip(listK,listV):
>             self._cDict[k]=v

Make that

self._cDict.update(zip(listK, listV))

By the way, not everyone loves Hungarian notation...




More information about the Python-list mailing list