Why not just inherit from dict? That seems to work.

>>> class M(dict):
...   def __getitem__(self,key):
...     return 42
...   def __setitem__(self,key,value):
...     pass
...
>>> class C(object):
...    pass
...
>>> c = C()
>>> c.__dict__ = M()
>>> c.__dict__['x']
42

-Dan

Steven Bethard wrote:

I tried to Google for past discussion on this topic, but without much luck. If this has been discussed before, I'd be grateful for a pointer.

Does anyone know why you can't assign a custom mapping type to an object's __dict__?

py> class M(object):
...     def __getitem__(self, key):
...         return 42
...     def __setitem__(self, key, value):
...         pass
...
py> class C(object):
...     pass
...
py> c = C()
py> c.__dict__ = M()
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
TypeError: __dict__ must be set to a dictionary

I looked at the source in typeobject.c (where this error originates), but I'm not fluent enough in CPython yet to be able to tell why a true dict type is preferred here over just a mapping type...

STeVe


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

Reply via email to