diff -r 1d72402c1c91 Lib/reprlib.py --- a/Lib/reprlib.py Tue Mar 15 13:33:28 2016 +1300 +++ b/Lib/reprlib.py Thu Mar 24 14:14:31 2016 +0800 @@ -30,6 +30,7 @@ wrapper.__module__ = getattr(user_function, '__module__') wrapper.__doc__ = getattr(user_function, '__doc__') wrapper.__name__ = getattr(user_function, '__name__') + wrapper.__qualname__ = getattr(user_function, '__qualname__') wrapper.__annotations__ = getattr(user_function, '__annotations__', {}) return wrapper diff -r 1d72402c1c91 Lib/test/test_reprlib.py --- a/Lib/test/test_reprlib.py Tue Mar 15 13:33:28 2016 +1300 +++ b/Lib/test/test_reprlib.py Thu Mar 24 14:14:31 2016 +0800 @@ -374,6 +374,13 @@ def __repr__(self): return '<' + ', '.join(map(str, self.values)) + '>' +class MyContainer3: + def __repr__(self): + 'Test document content' + pass + wrapped = __repr__ + wrapper = recursive_repr()(wrapped) + class TestRecursiveRepr(unittest.TestCase): def test_recursive_repr(self): m = MyContainer(list('abcde')) @@ -387,5 +394,12 @@ m.append(m) self.assertEqual(repr(m), '') + def test_assigned_attributes(self): + from functools import WRAPPER_ASSIGNMENTS as assigned + wrapped = MyContainer3.wrapped + wrapper = MyContainer3.wrapper + for name in assigned: + self.assertIs(getattr(wrapper, name), getattr(wrapped, name)) + if __name__ == "__main__": unittest.main()