+ # return None for attributes that don't exist
+ value = self._state.get(name)
+ return _maybe_subproxy(self, name, value)
+
+ def __setitem__(self, name, value):
+ return self.__setattr__(name, value)
+
+ def __getitem__(self, name):
+ return self.__getattr__(name)
+
+ def items(self):
+ return (
+ (k, _maybe_subproxy(self, k, v)) for k, v in self._state.items())