@@ -8403,6 +8403,40 @@ class X(Annotated[int, (1, 10)]): ...
84038403 self .assertEqual (X .__mro__ , (X , int , object ),
84048404 "Annotated should be transparent." )
84058405
8406+ def test_annotated_cached_with_types (self ):
8407+ class A (str ): ...
8408+ class B (str ): ...
8409+
8410+ field_a1 = Annotated [str , A ("X" )]
8411+ field_a2 = Annotated [str , B ("X" )]
8412+ a1_metadata = field_a1 .__metadata__ [0 ]
8413+ a2_metadata = field_a2 .__metadata__ [0 ]
8414+
8415+ self .assertIs (type (a1_metadata ), A )
8416+ self .assertEqual (a1_metadata , A ("X" ))
8417+ self .assertIs (type (a2_metadata ), B )
8418+ self .assertEqual (a2_metadata , B ("X" ))
8419+ self .assertIsNot (type (a1_metadata ), type (a2_metadata ))
8420+
8421+ field_b1 = Annotated [str , A ("Y" )]
8422+ field_b2 = Annotated [str , B ("Y" )]
8423+ b1_metadata = field_b1 .__metadata__ [0 ]
8424+ b2_metadata = field_b2 .__metadata__ [0 ]
8425+
8426+ self .assertIs (type (b1_metadata ), A )
8427+ self .assertEqual (b1_metadata , A ("Y" ))
8428+ self .assertIs (type (b2_metadata ), B )
8429+ self .assertEqual (b2_metadata , B ("Y" ))
8430+ self .assertIsNot (type (b1_metadata ), type (b2_metadata ))
8431+
8432+ field_c1 = Annotated [int , 1 ]
8433+ field_c2 = Annotated [int , 1.0 ]
8434+ field_c3 = Annotated [int , True ]
8435+
8436+ self .assertIs (type (field_c1 .__metadata__ [0 ]), int )
8437+ self .assertIs (type (field_c2 .__metadata__ [0 ]), float )
8438+ self .assertIs (type (field_c3 .__metadata__ [0 ]), bool )
8439+
84068440
84078441class TypeAliasTests (BaseTestCase ):
84088442 def test_canonical_usage_with_variable_annotation (self ):
0 commit comments