Start replacing UserDict.DictMixin with collections.MutableMapping (the bsddb modules are next).
diff --git a/Lib/shelve.py b/Lib/shelve.py
index 586d253..67878db 100644
--- a/Lib/shelve.py
+++ b/Lib/shelve.py
@@ -59,12 +59,12 @@
 from pickle import Pickler, Unpickler
 from io import BytesIO
 
-import UserDict
+import collections
 import warnings
 
 __all__ = ["Shelf","BsdDbShelf","DbfilenameShelf","open"]
 
-class Shelf(UserDict.DictMixin):
+class Shelf(collections.MutableMapping):
     """Base class for shelf implementations.
 
     This is initialized with a dictionary-like object.
@@ -81,7 +81,7 @@
         self.cache = {}
         self.keyencoding = "utf-8"
 
-    def keys(self):
+    def __iter__(self):
         for k in self.dict.keys():
             yield k.decode(self.keyencoding)