From: Armin R. <ar...@us...> - 2004-12-29 20:43:04
|
Update of /cvsroot/psyco/psyco/psyco In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22015/psyco Modified Files: kdictproxy.py Log Message: More work on psyco.compact: - getattr, setattr and delattr respect data descriptors now: psyco.compact subclasses should behave very much like object subclasses, including in the presence of properties. The __dict__ attribute is a way to access the underlying attribute if it is hidden by a data descriptor. - can assign to __dict__. It makes a copy of the dict into the instance, though; the dict and the instance don't reflect each other's future changes (they do in plain Python). - there is a better C API in compactobject.h, but it's disabled for now because it's not needed within Psyco. - includes documentation and tests! Index: kdictproxy.py =================================================================== RCS file: /cvsroot/psyco/psyco/psyco/kdictproxy.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** kdictproxy.py 28 Dec 2004 17:16:11 -0000 1.1 --- kdictproxy.py 29 Dec 2004 20:42:55 -0000 1.2 *************** *** 102,107 **** from _psyco import compact # Python 2.2 and above only - getslot_getter = compact.__dict__['__getslot__'].__get__ - members_getter = compact.__dict__['__members__'].__get__ --- 102,105 ---- *************** *** 110,126 **** def __init__(self, ko): self._ko = ko # compact object of which 'self' is the dict ! self.__getitem__ = getslot_getter(ko) def __setitem__(self, key, value): ! setattr(self._ko, key, value) def __delitem__(self, key): ! try: ! delattr(self._ko, key) ! except AttributeError: ! raise KeyError, key def keys(self): ! return members_getter(self._ko) def clear(self): --- 108,123 ---- def __init__(self, ko): self._ko = ko # compact object of which 'self' is the dict ! ! def __getitem__(self, key): ! return compact.__getslot__(self._ko, key) def __setitem__(self, key, value): ! compact.__setslot__(self._ko, key, value) def __delitem__(self, key): ! compact.__delslot__(self._ko, key) def keys(self): ! return compact.__members__.__get__(self._ko) def clear(self): *************** *** 128,132 **** keys.reverse() for key in keys: ! delattr(self._ko, key) def __repr__(self): --- 125,129 ---- keys.reverse() for key in keys: ! del self[key] def __repr__(self): |