Re: DictProxy? What is this?

2006-06-26 Thread Fredrik Lundh
[EMAIL PROTECTED] wrote:

 When I tried to update a class's __dict__, I got an error saying that
 there is no 'update' attribute for dictproxy object. What is a
 dictproxy object?

a CPython implementation detail, used to protect an internal data structure used
by new-style objects from unexpected modifications.

/F 



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


Re: DictProxy? What is this?

2006-06-26 Thread digitalorganics

Fredrik Lundh wrote:
 [EMAIL PROTECTED] wrote:

  When I tried to update a class's __dict__, I got an error saying that
  there is no 'update' attribute for dictproxy object. What is a
  dictproxy object?

 a CPython implementation detail, used to protect an internal data structure 
 used
 by new-style objects from unexpected modifications.

 /F

Ah, so I'm not suppose to be able to change a class's __dict__? Thanks
Fredrik.

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


Re: DictProxy? What is this?

2006-06-26 Thread Maric Michaud
Le lundi 26 juin 2006 16:06, [EMAIL PROTECTED] a écrit :
 Fredrik Lundh wrote:
  [EMAIL PROTECTED] wrote:
   When I tried to update a class's __dict__, I got an error saying that
   there is no 'update' attribute for dictproxy object. What is a
   dictproxy object?
 
  a CPython implementation detail, used to protect an internal data
  structure used by new-style objects from unexpected modifications.
 
  /F

 Ah, so I'm not suppose to be able to change a class's __dict__? Thanks
 Fredrik.

Of course, yes :

In [1]: class a(object) : pass
   ...:

In [2]: a.__dict__
Out[2]: dictproxy object at 0xa7e01d34

In [3]: a.__dict__.items()
Out[3]:
[('__dict__', attribute '__dict__' of 'a' objects),
 ('__module__', '__main__'),
 ('__weakref__', attribute '__weakref__' of 'a' objects),
 ('__doc__', None)]

In [4]: a.__dict__['foo'] = lambda s : True
---
exceptions.TypeError...

TypeError: object does not support item assignment

hmmm, not this way, but :

In [5]: a.foo = lambda s : True

In [6]: a.__dict__.items()
Out[6]:
[('__dict__', attribute '__dict__' of 'a' objects),
 ('__module__', '__main__'),
 ('foo', function lambda at 0xa79528ec),
 ('__weakref__', attribute '__weakref__' of 'a' objects),
 ('__doc__', None)]

In [7]: a().foo()
Out[7]: True

or :

In [9]: setattr(a, 'bar', lambda s : False)

In [10]: a().bar()
Out[10]: False


-- 
_

Maric Michaud
_

Aristote - www.aristote.info
3 place des tapis
69004 Lyon
Tel: +33 426 880 097
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: DictProxy? What is this?

2006-06-26 Thread digitalorganics
All right. Thanks for explaining that Maric.

Maric Michaud wrote:
 Le lundi 26 juin 2006 16:06, [EMAIL PROTECTED] a écrit :
  Fredrik Lundh wrote:
   [EMAIL PROTECTED] wrote:
When I tried to update a class's __dict__, I got an error saying that
there is no 'update' attribute for dictproxy object. What is a
dictproxy object?
  
   a CPython implementation detail, used to protect an internal data
   structure used by new-style objects from unexpected modifications.
  
   /F
 
  Ah, so I'm not suppose to be able to change a class's __dict__? Thanks
  Fredrik.

 Of course, yes :

 In [1]: class a(object) : pass
...:

 In [2]: a.__dict__
 Out[2]: dictproxy object at 0xa7e01d34

 In [3]: a.__dict__.items()
 Out[3]:
 [('__dict__', attribute '__dict__' of 'a' objects),
  ('__module__', '__main__'),
  ('__weakref__', attribute '__weakref__' of 'a' objects),
  ('__doc__', None)]

 In [4]: a.__dict__['foo'] = lambda s : True
 ---
 exceptions.TypeError...

 TypeError: object does not support item assignment

 hmmm, not this way, but :

 In [5]: a.foo = lambda s : True

 In [6]: a.__dict__.items()
 Out[6]:
 [('__dict__', attribute '__dict__' of 'a' objects),
  ('__module__', '__main__'),
  ('foo', function lambda at 0xa79528ec),
  ('__weakref__', attribute '__weakref__' of 'a' objects),
  ('__doc__', None)]

 In [7]: a().foo()
 Out[7]: True

 or :

 In [9]: setattr(a, 'bar', lambda s : False)

 In [10]: a().bar()
 Out[10]: False


 --
 _

 Maric Michaud
 _

 Aristote - www.aristote.info
 3 place des tapis
 69004 Lyon
 Tel: +33 426 880 097

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