gh-129463: Remove two attributes from ForwardRef equality (#132283)

This commit is contained in:
Jelle Zijlstra 2025-04-15 12:58:21 -07:00 committed by GitHub
parent 884df116d7
commit 5e80fee41a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 10 additions and 4 deletions

View file

@ -225,8 +225,6 @@ class ForwardRef:
# because dictionaries are not hashable. # because dictionaries are not hashable.
and self.__globals__ is other.__globals__ and self.__globals__ is other.__globals__
and self.__forward_is_class__ == other.__forward_is_class__ and self.__forward_is_class__ == other.__forward_is_class__
and self.__code__ == other.__code__
and self.__ast_node__ == other.__ast_node__
and self.__cell__ == other.__cell__ and self.__cell__ == other.__cell__
and self.__owner__ == other.__owner__ and self.__owner__ == other.__owner__
) )
@ -237,8 +235,6 @@ class ForwardRef:
self.__forward_module__, self.__forward_module__,
id(self.__globals__), # dictionaries are not hashable, so hash by identity id(self.__globals__), # dictionaries are not hashable, so hash by identity
self.__forward_is_class__, self.__forward_is_class__,
self.__code__,
self.__ast_node__,
self.__cell__, self.__cell__,
self.__owner__, self.__owner__,
)) ))

View file

@ -6539,6 +6539,13 @@ class ForwardRefTests(BaseTestCase):
self.assertEqual(X | "x", Union[X, "x"]) self.assertEqual(X | "x", Union[X, "x"])
self.assertEqual("x" | X, Union["x", X]) self.assertEqual("x" | X, Union["x", X])
def test_multiple_ways_to_create(self):
X1 = Union["X"]
self.assertIsInstance(X1, ForwardRef)
X2 = ForwardRef("X")
self.assertIsInstance(X2, ForwardRef)
self.assertEqual(X1, X2)
class InternalsTests(BaseTestCase): class InternalsTests(BaseTestCase):
def test_deprecation_for_no_type_params_passed_to__evaluate(self): def test_deprecation_for_no_type_params_passed_to__evaluate(self):

View file

@ -0,0 +1,3 @@
Comparison of :class:`annotationlib.ForwardRef` objects no longer uses the
internal ``__code__`` and ``__ast_node__`` attributes, which are used as
caches.