@@ -7627,6 +7627,40 @@ class X(Annotated[int, (1, 10)]): ...
7627
7627
self .assertEqual (X .__mro__ , (X , int , object ),
7628
7628
"Annotated should be transparent." )
7629
7629
7630
+ def test_annotated_cached_with_types (self ):
7631
+ class A (str ): ...
7632
+ class B (str ): ...
7633
+
7634
+ field_a1 = Annotated [str , A ("X" )]
7635
+ field_a2 = Annotated [str , B ("X" )]
7636
+ a1_metadata = field_a1 .__metadata__ [0 ]
7637
+ a2_metadata = field_a2 .__metadata__ [0 ]
7638
+
7639
+ self .assertIs (type (a1_metadata ), A )
7640
+ self .assertEqual (a1_metadata , A ("X" ))
7641
+ self .assertIs (type (a2_metadata ), B )
7642
+ self .assertEqual (a2_metadata , B ("X" ))
7643
+ self .assertIsNot (type (a1_metadata ), type (a2_metadata ))
7644
+
7645
+ field_b1 = Annotated [str , A ("Y" )]
7646
+ field_b2 = Annotated [str , B ("Y" )]
7647
+ b1_metadata = field_b1 .__metadata__ [0 ]
7648
+ b2_metadata = field_b2 .__metadata__ [0 ]
7649
+
7650
+ self .assertIs (type (b1_metadata ), A )
7651
+ self .assertEqual (b1_metadata , A ("Y" ))
7652
+ self .assertIs (type (b2_metadata ), B )
7653
+ self .assertEqual (b2_metadata , B ("Y" ))
7654
+ self .assertIsNot (type (b1_metadata ), type (b2_metadata ))
7655
+
7656
+ field_c1 = Annotated [int , 1 ]
7657
+ field_c2 = Annotated [int , 1.0 ]
7658
+ field_c3 = Annotated [int , True ]
7659
+
7660
+ self .assertIs (type (field_c1 .__metadata__ [0 ]), int )
7661
+ self .assertIs (type (field_c2 .__metadata__ [0 ]), float )
7662
+ self .assertIs (type (field_c3 .__metadata__ [0 ]), bool )
7663
+
7630
7664
7631
7665
class TypeAliasTests (BaseTestCase ):
7632
7666
def test_canonical_usage_with_variable_annotation (self ):
0 commit comments