Davide Rizzo <[email protected]> added the comment:
Amaury, I don't honestly know, I would have proposed something otherwise.
I have been advised on #python (Freenode) not to assign to obj.__dict__ because
its behaviour changes between versions and implementations, but I wouldn't know
what has changed between CPython version.
One obscure thing is what can be assigned to __dict__. For class dicts no
assignment is allowed. Object dicts can be assigned dict objects. If you try to
assign a non-dict mapping it will complain.
However you can assign a dict-derived object, something like:
class SillyDict(dict):
def __getitem__(self, key):
return "hello"
obj.__dict__ = SillyDict()
Unfortunately accessing the attributes of obj will still use PyDict_*
functions, thus ignoring any magic methods.
PyPy's behavior is slightly different. A class __dict__ attribute still is read
only, but you can assign any mapping object to an object __dict__.
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue15360>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com