[moving to python-dev] Alex Martelli wrote:
Georg Brandl
wrote: can someone please tell me that this is correct and why:
IMHO, it is not correct: it is a Python bug (and it would be nice to fix it in 2.5).
Fine. Credits go to Michal Kwiatkowski for discovering that in bug #1448042 which I closed out of ignorance ;)
class C(object): ... pass ... c = C() c.a = 1 c.__dict__ {'a': 1} c.__dict__ = {} c.a Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'C' object has no attribute 'a'
So far so good, I think we agree;-). Yes.
class D(object): ... __dict__ = {} ... d = D() d.a = 1 d.__dict__ {} d.__dict__ = {} d.a 1
Yep, that's the bug, fully reproducible in 2.3 and 2.4. FWIW, mucking around with gc.getreferrers (with a more uniquely identifiable value for d.a;-) shows a dictionary "somewhere" with keys 'a' and '__dict__'...
Georg