I am trying to create a custom type on Python 3.7 typing module. The new type (say Struct) should be same as type tuple. In Python3.6, I was able to do the same by taking cue from Typing.GenericMeta and typing.TupleMeta.
With typing module updated in Python3.7, GenericMeta and TupleMeta do not exist, and the special class that I would like to subclass is not possible. e.g. _VariadicGenericAlias cannot be subclassed. What I really want is something similar to: Struct = _VariadicGenericAlias(tuple, (), , inst=False, special=True) and assert _origin(Struct[int, str]) == <class 'Struct'> Note: def _origin(typ: Any) -> Any: """Get the original (the bare) typing class. Get the unsubscripted version of a type. Supports generic types, Union, Callable, and Tuple. Returns None for unsupported types. Examples:: get_origin(int) == None get_origin(ClassVar[int]) == None get_origin(Generic) == Generic get_origin(Generic[T]) == Generic get_origin(Union[T, int]) == Union get_origin(List[Tuple[T, T]][int]) == list """ if isinstance(typ, _GenericAlias): return typ.__origin__ if typ.__origin__ is not ClassVar else None if typ is Generic: return Generic return None Deeply appreciate your help around this !! Thanks, Chirag -- https://mail.python.org/mailman/listinfo/python-list