Adding a list of descriptors to a class

2007-08-07 Thread Bob B.
I've been playing with descriptors lately.  I'm having one problem I
can't seem to find the answer to.  I want to assign a descriptor to a
list of attributes.  I know I should be able to add these somewhere in
the class's __dict__, but I can't figure out where.  Here's some code:

class MyDesc(object):
  def __init__(self, name=None, initVal=None):
self.name = name
self.value = initVal

  def __get__(self, obj, objtype):
// Do some stuff
self.value = "blah"
return self.value

class MyClass(object):
  attributes = ('attr1', 'attr2')
  for attr in attributes:
exec ("%s=MyDesc('%s')") % (attr, attr)

  // More stuff in the class

Ok, that "exec" is an ugly hack.  There's gotta be someway to plop
this straight into the class's __dict__ without doing that, but when I
try adding self.__class__.__dict__[attr] = MyDesc(attr) in MyClass's
__init__ method, I get the error: "TypeError: 'dictproxy' object does
not support item assignment"

Any ideas?

Thanks,
Bob

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


Re: Adding a list of descriptors to a class

2007-08-07 Thread Bob B.
> Probably the simplest thing is to just add the attributes after the
> class body, e.g.::
>
>  >>> class MyClass(object):
>  ... pass
>  ...
>  >>> for attr in ['attr1', 'attr2']:
>  ... setattr(MyClass, attr, MyDesc(attr))
>  ...
>  >>> c = MyClass()
>  >>> c.attr1
>  'blah'
>

That worked.  Thanks.


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