Ken Jin <[email protected]> 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 <[email protected]>
<https://bugs.python.org/issue42195>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com