Ken Jin <kenjin4...@gmail.com> added the comment:
Dear Guido, from what I can see in the typing module, _CallableType already casts the args list to a tuple before creating the __CallableGenericAlias, so it should support cacheing. This is taken from the from _CallableType:: def __getitem__(self, params): ... # (some checking code here) args, result = params ... # (some checking code here) params = (tuple(args), result) # args is cast to a tuple return self.__getitem_inner__(params) @_tp_cache # the cache def __getitem_inner__(self, params): args, result = params ... # (some checking code here) # This is the suspect code causing the flattening of args params = args + (result,) return self.copy_with(params) def copy_with(self, params): return _CallableGenericAlias(self.__origin__, params, name=self._name, inst=self._inst) Changing the suspect code from ``params = args + (result,)`` to ``params = (args, result)`` allows typing.Callable to be consistent with collections.abc.Callable's GenericAlias, and also allows for cacheing. With that change: >>> from typing import Callable >>> Callable[[int, ], str].__args__ ((<class 'int'>,), <class 'str'>) # note the args is a tuple >>> from collections.abc import Callable >>> Callable[[int, ], str].__args__ ([<class 'int'>], <class 'str'>) # note the args is a list This isn't fully consistent with collections.abc.Callable's GenericAlias just yet, but it's close. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue42195> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com