Index: django/utils/functional.py
===================================================================
--- django/utils/functional.py	(révision 16025)
+++ django/utils/functional.py	(copie de travail)
@@ -67,14 +67,15 @@
             cls.__dispatch = {}
             for resultclass in resultclasses:
                 cls.__dispatch[resultclass] = {}
-                for (k, v) in resultclass.__dict__.items():
-                    # All __promise__ return the same wrapper method, but they
-                    # also do setup, inserting the method into the dispatch
-                    # dict.
-                    meth = cls.__promise__(resultclass, k, v)
-                    if hasattr(cls, k):
-                        continue
-                    setattr(cls, k, meth)
+                for type_ in reversed(resultclass.mro()):
+                    for (k, v) in type_.__dict__.items():
+                        # All __promise__ return the same wrapper method, but they
+                        # also do setup, inserting the method into the dispatch
+                        # dict.
+                        meth = cls.__promise__(resultclass, k, v)
+                        if hasattr(cls, k):
+                            continue
+                        setattr(cls, k, meth)
             cls._delegate_str = str in resultclasses
             cls._delegate_unicode = unicode in resultclasses
             assert not (cls._delegate_str and cls._delegate_unicode), "Cannot call lazy() with both str and unicode return types."
Index: tests/regressiontests/utils/functional.py
===================================================================
--- tests/regressiontests/utils/functional.py	(révision 16025)
+++ tests/regressiontests/utils/functional.py	(copie de travail)
@@ -1,9 +1,15 @@
 from django.utils import unittest
 from django.utils.functional import lazy
+from django.utils.datastructures import SortedDict
 
-
 class FunctionalTestCase(unittest.TestCase):
     def test_lazy(self):
         t = lazy(lambda: tuple(range(3)), list, tuple)
         for a, b in zip(t(), range(3)):
             self.assertEqual(a, b)
+
+    def test_lazy_deep_copy(self):
+        """test deep copy of class methods by lazy function"""
+        t = lazy(lambda: SortedDict([('key','value'), (1,1)]), SortedDict)()
+        self.assertEqual(t[1], 1)
+        self.assertTrue('key' in t.keys())
