[Python-checkins] python/dist/src/Lib pickle.py,1.142,1.143
gvanrossum@users.sourceforge.net
gvanrossum@users.sourceforge.net
Mon, 03 Feb 2003 11:46:58 -0800
Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1:/tmp/cvs-serv2565
Modified Files:
pickle.py
Log Message:
_slotnames(): this is a fairly expensive calculation. Cache the
outcome as __slotnames__ on the class. (Like __slots__, it's not safe
to ask for this as an attribute -- you must look for it in the
specific class's __dict__. But it must be set using attribute
notation, because __dict__ is a read-only proxy.)
Index: pickle.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/pickle.py,v
retrieving revision 1.142
retrieving revision 1.143
diff -C2 -d -r1.142 -r1.143
*** pickle.py 3 Feb 2003 18:10:09 -0000 1.142
--- pickle.py 3 Feb 2003 19:46:54 -0000 1.143
***************
*** 877,887 ****
defined.)
"""
! if not hasattr(cls, "__slots__"):
! return []
names = []
! for c in cls.__mro__:
! if "__slots__" in c.__dict__:
! names += [name for name in c.__dict__["__slots__"]
! if name not in ("__dict__", "__weakref__")]
return names
--- 877,904 ----
defined.)
"""
!
! # Get the value from a cache in the class if possible
! names = cls.__dict__.get("__slotnames__")
! if names is not None:
! return names
!
! # Not cached -- calculate the value
names = []
! if not hasattr(cls, "__slots__"):
! # This class has no slots
! pass
! else:
! # Slots found -- gather slot names from all base classes
! for c in cls.__mro__:
! if "__slots__" in c.__dict__:
! names += [name for name in c.__dict__["__slots__"]
! if name not in ("__dict__", "__weakref__")]
!
! # Cache the outcome in the class if at all possible
! try:
! cls.__slotnames__ = names
! except:
! pass # But don't die if we can't
!
return names