示例#1
0
 def __setstate__(self, state):
     if _hasattribute(self, '__dict__'):
         _getattribute(self, '__dict__').clear()
     for name in self._p_gen_data_slots():
         _delattribute(self, name)
     if state is not None:
         for key, value in iteritems(state):
             _setattribute(self, key, value)
示例#2
0
文件: persistent.py 项目: pfw/Durus
 def _p_gen_data_slots(self):
     """Generate the sequence of names of data slots that have values.
     """
     for klass in self.__class__.__mro__:
         if klass is not PersistentBase:
             for name in getattr(klass, "__slots__", []):
                 if name not in ("__weakref__", "__dict__") and _hasattribute(self, name):
                     yield name
示例#3
0
 def __getstate__(self):
     if self._p_status == GHOST:
         self._p_load_state()
     state = {}
     if _hasattribute(self, '__dict__'):
         state.update(_getattribute(self, '__dict__'))
     for name in self._p_gen_data_slots():
         state[name] = _getattribute(self, name)
     return state
示例#4
0
 def _p_gen_data_slots(self):
     """Generate the sequence of names of data slots that have values.
     """
     for klass in self.__class__.__mro__:
         if klass is not PersistentBase:
             for name in getattr(klass, '__slots__', []):
                 if (name not in ('__weakref__', '__dict__') and
                     _hasattribute(self, name)):
                     yield name
示例#5
0
    def get(self, compute):
        """(compute) -> value

        Compute the value (if necessary) and return it.  'compute' needs
        to be a function that takes no arguments.
        """
        # we are careful here not to mark object as UNSAVED
        if _hasattribute(self, 'value'):
            value = _getattribute(self, 'value')
        else:
            value = compute()
            _setattribute(self, 'value', value)
        return value