]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-46333: include `module` in `ForwardRef.__repr__` (#31283)
authoraha79 <34090357+aha79@users.noreply.github.com>
Sat, 12 Feb 2022 15:35:57 +0000 (16:35 +0100)
committerGitHub <noreply@github.com>
Sat, 12 Feb 2022 15:35:57 +0000 (07:35 -0800)
The module parameter carries semantic information about the forward ref.
Show to the user that forward refs with same argument but different
module are different.

Co-authored-by: Andreas Hangauer <andreas.hangauer@siemens.com>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Lib/test/test_typing.py
Lib/typing.py
Misc/NEWS.d/next/Library/2022-02-11-20-01-49.bpo-46333.PMTBY9.rst [new file with mode: 0644]

index 6e2a2b1978ab401c8b65011f5ae8655bd97a037e..2bb5d61068a78c40374650e8d772c197fb563157 100644 (file)
@@ -2862,6 +2862,8 @@ class ForwardRefTests(BaseTestCase):
 
     def test_forward_repr(self):
         self.assertEqual(repr(List['int']), "typing.List[ForwardRef('int')]")
+        self.assertEqual(repr(List[ForwardRef('int', module='mod')]), 
+                         "typing.List[ForwardRef('int', module='mod')]")       
 
     def test_union_forward(self):
 
index 1de48cca00d84c5c9706b9cfc994715b5878bfba..4a8bdf8132861ed65904399292bbfbddceae744f 100644 (file)
@@ -779,7 +779,11 @@ class ForwardRef(_Final, _root=True):
         return Union[other, self]
 
     def __repr__(self):
-        return f'ForwardRef({self.__forward_arg__!r})'
+        if self.__forward_module__ is None:
+            module_repr = ''
+        else:
+            module_repr = f', module={self.__forward_module__!r}'
+        return f'ForwardRef({self.__forward_arg__!r}{module_repr})'
 
 class _TypeVarLike:
     """Mixin for TypeVar-like types (TypeVar and ParamSpec)."""
diff --git a/Misc/NEWS.d/next/Library/2022-02-11-20-01-49.bpo-46333.PMTBY9.rst b/Misc/NEWS.d/next/Library/2022-02-11-20-01-49.bpo-46333.PMTBY9.rst
new file mode 100644 (file)
index 0000000..669217e
--- /dev/null
@@ -0,0 +1,3 @@
+The :meth:`__repr__` method of :class:`typing.ForwardRef` now\r
+includes the ``module`` parameter of :class:`typing.ForwardRef`\r
+when it is set.