You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
(3.13). These look unsound already; it's possible for two ForwardRefs to compare equal but hash differently (if they have the same evaluated value but not the same __forward_module__). This gets worse on 3.14, where ForwardRef has gained a few more fields (
I think it's better to remove the __eq__ and __hash__ methods from ForwardRef objects, and make it so two ForwardRefs are equal only if they're identical. I don't see a good use case for comparing two ForwardRefs for equality; if you want to know that they refer to the same thing, you should evaluate them and compare the type object that comes out.
Feature or enhancement
Currently,
annotationlib.ForwardRef
has a__hash__
and__eq__
method, which look at a few attributes:cpython/Lib/typing.py
Line 1096 in 8b4a0d6
__forward_module__
). This gets worse on 3.14, where ForwardRef has gained a few more fields (cpython/Lib/annotationlib.py
Line 232 in a472244
I think it's better to remove the
__eq__
and__hash__
methods fromForwardRef
objects, and make it so two ForwardRefs are equal only if they're identical. I don't see a good use case for comparing two ForwardRefs for equality; if you want to know that they refer to the same thing, you should evaluate them and compare the type object that comes out.This came up in agronholm/typeguard#492 where the current implementation of equality caused some grief. cc people involved with some runtime type checking tools: @agronholm @Viicos @leycec.
Linked PRs
The text was updated successfully, but these errors were encountered: