Carl Banks wrote: > Simon Bunker wrote: > >>Hi I have code similar to this: >> >>class Input(object): >> >> def __init__(self, val): >> self.value = val >> >> def __get__(self, obj, objtype): >> return self.value >> >> def __set__(self, obj, val): >> # do some checking... only accept floats etc >> self.value = val >> >>class Node(object): >> >> a = Input(1) >> b = Input(2) >> >>I realise that a and b are now class attributes - however I want to do this: >> >>node1 = Node() >>node2 = Node() >> >>node1.a = 3 >>node2.b = 4 >> >>And have them keep these values per instance. However now node1.a is 4 >>when it should be 3. > > [snip] > >>Is there any way of doing this nicely in Python? > > > The easiest way is to store the value in a hidden attribute of the > object. For instance: > > class Input(object): > def __init__(self,default,name): > self.default = default > self.name = name # or, create a name automatically > def __get__(self,obj,objtype): > return getattr(obj,self.name,self.default) > def __set__(self,obj,value): > setattr(obj,self.name,value) > > class Node(object): > a = Input(1,"_a") > b = Input(2,"_b") > > > Carl Banks >
This does seem the easiest way - but also a bit of a hack. Would it work to assign to instance variables - each the class attribute sets the instance attribute with the same name? Or would that not work? Simon -- http://mail.python.org/mailman/listinfo/python-list