diff --git a/django/utils/functional.py b/django/utils/functional.py
index befe3e9..66667ad 100644
--- a/django/utils/functional.py
+++ b/django/utils/functional.py
@@ -81,15 +81,15 @@ def lazy(func, *resultclasses):
             cls.__dispatch = {}
             for resultclass in resultclasses:
                 cls.__dispatch[resultclass] = {}
-                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)
+                for k in dir(resultclass):
+                    v = getattr(resultclass, k)
+                    # 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."
