@@ -674,6 +674,41 @@ class C(B[int]):
674
674
c .bar = 'abc'
675
675
self .assertEqual (c .__dict__ , {'bar' : 'abc' })
676
676
677
+ def test_subscripted_generics_as_proxies (self ):
678
+ T = TypeVar ('T' )
679
+ class C (Generic [T ]):
680
+ x = 'def'
681
+ self .assertEqual (C [int ].x , 'def' )
682
+ self .assertEqual (C [C [int ]].x , 'def' )
683
+ C [C [int ]].x = 'changed'
684
+ self .assertEqual (C .x , 'changed' )
685
+ self .assertEqual (C [str ].x , 'changed' )
686
+ C [List [str ]].z = 'new'
687
+ self .assertEqual (C .z , 'new' )
688
+ self .assertEqual (C [Tuple [int ]].z , 'new' )
689
+
690
+ self .assertEqual (C ().x , 'changed' )
691
+ self .assertEqual (C [Tuple [str ]]().z , 'new' )
692
+
693
+ class D (C [T ]):
694
+ pass
695
+ self .assertEqual (D [int ].x , 'changed' )
696
+ self .assertEqual (D .z , 'new' )
697
+ D .z = 'from derived z'
698
+ D [int ].x = 'from derived x'
699
+ self .assertEqual (C .x , 'changed' )
700
+ self .assertEqual (C [int ].z , 'new' )
701
+ self .assertEqual (D .x , 'from derived x' )
702
+ self .assertEqual (D [str ].z , 'from derived z' )
703
+
704
+ def test_abc_registry_kept (self ):
705
+ T = TypeVar ('T' )
706
+ class C (Generic [T ]): ...
707
+ C .register (int )
708
+ self .assertIsInstance (1 , C )
709
+ C [int ]
710
+ self .assertIsInstance (1 , C )
711
+
677
712
def test_false_subclasses (self ):
678
713
class MyMapping (MutableMapping [str , str ]): pass
679
714
self .assertNotIsInstance ({}, MyMapping )
0 commit comments