L. Peter Deutsch added the comment: The proposed approach to speeding up lookup of inherited methods is not quite sound, given that class attributes can be added and removed dynamically. Consider:
class A: def f(x): ... class B(A): pass class C(B): pass If C caches a pointer to A.f, the wrong thing will happen if B.f is defined dynamically, even though C's pointer will still point to a valid and up-to-date entry for f in A's dict, and C's MRO will not have changed. I thought a sufficient fix would be for classes to increment not only their own 64-bit dict "version" but that of all classes in their MRO if an entry is ever added or removed in their dict. But even this is not sufficient. Consider: class A: def f(x): ... class B(A): pass class C(B): pass class D: pass class E(D,C): pass If D.f is defined dynamically, E's cached pointer to C.f will retrieve the wrong value. But C is not in D's MRO. I haven't encountered this issue before in a system with multiple base classes (my extensive experience is with classic Smalltalk, and PostScript), so I don't have an off-the-cuff solution. ---------- nosy: +lpd __________________________________ Tracker <[EMAIL PROTECTED]> <http://bugs.python.org/issue1518> __________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com