Nick Coghlan wrote:
Steven Bethard wrote:
The problem with inheriting from dict is that you then need to
override *all* the methods in the dict object, because they all go
straight to Python's dict'c C code functions. So just because you
redefine __getitem__ doesn't mean you don't still have to redefine
__contains__, get, update, etc. UserDict.DictMixin can help with this
some, but the ideal situation would be to only have to define the
methods you actually support. Inheriting from dict likely means you
have to redefine a bunch of functions to raise Exceptions saying that
they're unsupported.
You're just lucky the affected class is already overriding
__getattribute__, so the __dict__ is generally getting accessed from
Python code :)
If it weren't for that, object.c's direct calls to the PyDict_* API
would be making things even more fun for you than they already are (as
Duncan pointed out).
Yup, I noticed that. Lucky us. =)
STeVe
--
http://mail.python.org/mailman/listinfo/python-list