99from abc import ABCMeta , abstractmethod
1010import sys
1111
12+ GenericAlias = type (list [int ])
13+
1214__all__ = ["Awaitable" , "Coroutine" ,
1315 "AsyncIterable" , "AsyncIterator" , "AsyncGenerator" ,
1416 "Hashable" , "Iterable" , "Iterator" , "Generator" , "Reversible" ,
@@ -110,6 +112,8 @@ def __subclasshook__(cls, C):
110112 return _check_methods (C , "__await__" )
111113 return NotImplemented
112114
115+ __class_getitem__ = classmethod (GenericAlias )
116+
113117
114118class Coroutine (Awaitable ):
115119
@@ -169,6 +173,8 @@ def __subclasshook__(cls, C):
169173 return _check_methods (C , "__aiter__" )
170174 return NotImplemented
171175
176+ __class_getitem__ = classmethod (GenericAlias )
177+
172178
173179class AsyncIterator (AsyncIterable ):
174180
@@ -255,6 +261,8 @@ def __subclasshook__(cls, C):
255261 return _check_methods (C , "__iter__" )
256262 return NotImplemented
257263
264+ __class_getitem__ = classmethod (GenericAlias )
265+
258266
259267class Iterator (Iterable ):
260268
@@ -274,6 +282,7 @@ def __subclasshook__(cls, C):
274282 return _check_methods (C , '__iter__' , '__next__' )
275283 return NotImplemented
276284
285+
277286Iterator .register (bytes_iterator )
278287Iterator .register (bytearray_iterator )
279288#Iterator.register(callable_iterator)
@@ -353,6 +362,7 @@ def __subclasshook__(cls, C):
353362 'send' , 'throw' , 'close' )
354363 return NotImplemented
355364
365+
356366Generator .register (generator )
357367
358368
@@ -385,6 +395,9 @@ def __subclasshook__(cls, C):
385395 return _check_methods (C , "__contains__" )
386396 return NotImplemented
387397
398+ __class_getitem__ = classmethod (GenericAlias )
399+
400+
388401class Collection (Sized , Iterable , Container ):
389402
390403 __slots__ = ()
@@ -395,6 +408,7 @@ def __subclasshook__(cls, C):
395408 return _check_methods (C , "__len__" , "__iter__" , "__contains__" )
396409 return NotImplemented
397410
411+
398412class Callable (metaclass = ABCMeta ):
399413
400414 __slots__ = ()
@@ -409,6 +423,8 @@ def __subclasshook__(cls, C):
409423 return _check_methods (C , "__call__" )
410424 return NotImplemented
411425
426+ __class_getitem__ = classmethod (GenericAlias )
427+
412428
413429### SETS ###
414430
@@ -550,6 +566,7 @@ def _hash(self):
550566 h = 590923713
551567 return h
552568
569+
553570Set .register (frozenset )
554571
555572
@@ -632,6 +649,7 @@ def __isub__(self, it):
632649 self .discard (value )
633650 return self
634651
652+
635653MutableSet .register (set )
636654
637655
@@ -688,6 +706,7 @@ def __eq__(self, other):
688706
689707 __reversed__ = None
690708
709+
691710Mapping .register (mappingproxy )
692711
693712
@@ -704,6 +723,8 @@ def __len__(self):
704723 def __repr__ (self ):
705724 return '{0.__class__.__name__}({0._mapping!r})' .format (self )
706725
726+ __class_getitem__ = classmethod (GenericAlias )
727+
707728
708729class KeysView (MappingView , Set ):
709730
@@ -719,6 +740,7 @@ def __contains__(self, key):
719740 def __iter__ (self ):
720741 yield from self ._mapping
721742
743+
722744KeysView .register (dict_keys )
723745
724746
@@ -743,6 +765,7 @@ def __iter__(self):
743765 for key in self ._mapping :
744766 yield (key , self ._mapping [key ])
745767
768+
746769ItemsView .register (dict_items )
747770
748771
@@ -761,6 +784,7 @@ def __iter__(self):
761784 for key in self ._mapping :
762785 yield self ._mapping [key ]
763786
787+
764788ValuesView .register (dict_values )
765789
766790
@@ -847,6 +871,7 @@ def setdefault(self, key, default=None):
847871 self [key ] = default
848872 return default
849873
874+
850875MutableMapping .register (dict )
851876
852877
@@ -914,6 +939,7 @@ def count(self, value):
914939 'S.count(value) -> integer -- return number of occurrences of value'
915940 return sum (1 for v in self if v is value or v == value )
916941
942+
917943Sequence .register (tuple )
918944Sequence .register (str )
919945Sequence .register (range )
@@ -1000,5 +1026,6 @@ def __iadd__(self, values):
10001026 self .extend (values )
10011027 return self
10021028
1029+
10031030MutableSequence .register (list )
10041031MutableSequence .register (bytearray ) # Multiply inheriting, see ByteString
0 commit comments