@@ -642,6 +642,33 @@ class C(B[int]):
642
642
c .bar = 'abc'
643
643
self .assertEqual (c .__dict__ , {'bar' : 'abc' })
644
644
645
+ def test_subscripted_generics_as_proxies (self ):
646
+ T = TypeVar ('T' )
647
+ class C (Generic [T ]):
648
+ x = 'def'
649
+ self .assertEqual (C [int ].x , 'def' )
650
+ self .assertEqual (C [C [int ]].x , 'def' )
651
+ C [C [int ]].x = 'changed'
652
+ self .assertEqual (C .x , 'changed' )
653
+ self .assertEqual (C [str ].x , 'changed' )
654
+ C [List [str ]].z = 'new'
655
+ self .assertEqual (C .z , 'new' )
656
+ self .assertEqual (C [Tuple [int ]].z , 'new' )
657
+
658
+ self .assertEqual (C ().x , 'changed' )
659
+ self .assertEqual (C [Tuple [str ]]().z , 'new' )
660
+
661
+ class D (C [T ]):
662
+ pass
663
+ self .assertEqual (D [int ].x , 'changed' )
664
+ self .assertEqual (D .z , 'new' )
665
+ D .z = 'from derived z'
666
+ D [int ].x = 'from derived x'
667
+ self .assertEqual (C .x , 'changed' )
668
+ self .assertEqual (C [int ].z , 'new' )
669
+ self .assertEqual (D .x , 'from derived x' )
670
+ self .assertEqual (D [str ].z , 'from derived z' )
671
+
645
672
def test_false_subclasses (self ):
646
673
class MyMapping (MutableMapping [str , str ]): pass
647
674
self .assertNotIsInstance ({}, MyMapping )
0 commit comments