[Checkins] SVN: BTrees/branches/pure_python/ Don't use __dict__ for BTrees objects in Python.

Tres Seaver cvs-admin at zope.org
Wed Dec 5 00:59:58 UTC 2012


Log message for revision 128532:
  Don't use __dict__ for BTrees objects in Python.

Changed:
  _U  BTrees/branches/pure_python/
  U   BTrees/branches/pure_python/BTrees/_base.py
  U   BTrees/branches/pure_python/BTrees/tests/test__base.py

-=-
Modified: BTrees/branches/pure_python/BTrees/_base.py
===================================================================
--- BTrees/branches/pure_python/BTrees/_base.py	2012-12-05 00:41:51 UTC (rev 128531)
+++ BTrees/branches/pure_python/BTrees/_base.py	2012-12-05 00:59:57 UTC (rev 128532)
@@ -28,6 +28,7 @@
 
 class _Base(Persistent):
 
+    __slots__ = ()
     _key_type = list
 
     def __init__(self, items=None):
@@ -38,6 +39,11 @@
 
 class _BucketBase(_Base):
 
+    __slots__ = ('_keys',
+                 '_next',
+                 '_to_key',
+                )
+
     def clear(self):
         self._keys = self._key_type()
         self._next = None
@@ -148,6 +154,16 @@
 
 class _SetIteration(object):
 
+    __slots__ = ('to_iterate',
+                 'useValues',
+                 '_next',
+                 'active',
+                 'position',
+                 'key',
+                 'value',
+                )
+
+
     def __init__(self, to_iterate, useValues=False, default=None):
         if to_iterate is None:
             to_iterate = ()
@@ -167,6 +183,7 @@
         self._next = itmeth().next
         self.active = True
         self.position = 0
+        self.key = _marker
         self.value = default
         self.advance()
 
@@ -186,6 +203,7 @@
 
 class Bucket(_BucketBase):
 
+    __slots__ = ()
     _value_type = list
     _to_value = lambda self, x: x
     VALUE_SAME_CHECK = False
@@ -479,6 +497,8 @@
 
 class Set(_BucketBase):
 
+    __slots__ = ()
+
     def add(self, key):
         return self._set(self._to_key(key))[0]
 
@@ -670,7 +690,9 @@
 
 class _TreeItem(object):
 
-    __slots__ = 'key', 'child'
+    __slots__ = ('key',
+                 'child',
+                )
 
     def __init__(self, key, child):
         self.key = key
@@ -679,6 +701,10 @@
 
 class _Tree(_Base):
 
+    __slots__ = ('_data',
+                 '_firstbucket',
+                )
+
     def setdefault(self, key, value):
         return self._set(self._to_key(key), self._to_value(value), True)[1]
 
@@ -1025,12 +1051,23 @@
 
 class _TreeItems(object):
 
+    __slots__ = ('firstbucket',
+                 'itertype',
+                 'iterargs',
+                 'index',
+                 'it',
+                 'v',
+                 '_len',
+                )
+
     def __init__(self, firstbucket, itertype, iterargs):
         self.firstbucket = firstbucket
         self.itertype = itertype
         self.iterargs = iterargs
         self.index = -1
         self.it = iter(self)
+        self.v = None
+        self._len = None
 
     def __getitem__(self, i):
         if isinstance(i, slice):
@@ -1054,14 +1091,12 @@
         return self.v
 
     def __len__(self):
-        try:
-            return self._len
-        except AttributeError:
+        if self._len is None:
             i = 0
             for _ in self:
                 i += 1
             self._len = i
-            return self._len
+        return self._len
 
     def __iter__(self):
         bucket = self.firstbucket
@@ -1082,6 +1117,8 @@
 
 class Tree(_Tree):
 
+    __slots__ = ()
+
     def get(self, key, default=None):
         bucket = self._findbucket(key)
         if bucket:
@@ -1119,6 +1156,8 @@
 
 class TreeSet(_Tree):
 
+    __slots__ = ()
+
     #_next = None
     def add(self, key):
         return self._set(self._to_key(key))[0]
@@ -1138,6 +1177,10 @@
 
 class set_operation(object):
 
+    __slots__ = ('func',
+                 'set_type',
+                )
+
     def __init__(self, func, set_type):
         self.func = func
         self.set_type = set_type

Modified: BTrees/branches/pure_python/BTrees/tests/test__base.py
===================================================================
--- BTrees/branches/pure_python/BTrees/tests/test__base.py	2012-12-05 00:41:51 UTC (rev 128531)
+++ BTrees/branches/pure_python/BTrees/tests/test__base.py	2012-12-05 00:59:57 UTC (rev 128532)
@@ -398,9 +398,10 @@
         return self._getTargetClass()(to_iterate, useValues, default)
 
     def test_ctor_w_None(self):
+        from .._base import _marker
         si = self._makeOne(None)
         self.assertEqual(si.useValues, False)
-        self.failIf('key' in si.__dict__)
+        self.assertTrue(si.key is _marker)
         self.assertEqual(si.value, None)
         self.assertEqual(si.active, False)
         self.assertEqual(si.position, -1)



More information about the checkins mailing list