Serhiy Storchaka <storchaka+cpyt...@gmail.com> added the comment:

The next PR removes __args__ and __parameters__ from _SpecialGenericAlias.

* No existing test is failed. It is an evidence that these attributes are not 
intended, but a side effect of mixing two different kinds in one class.

* get_args() ignores __args__ and returns () for _SpecialGenericAlias (after 
resolving issue40398).

* Nested _SpecialGenericAlias is not considered a generic class containing type 
variables:

>>> from typing import *
>>> T = TypeVar('T')
>>> Dict[int, List[T]][str]
typing.Dict[int, typing.List[str]]
>>> Dict[int, List][str]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/serhiy/py/cpython-release/Lib/typing.py", line 244, in inner
    return func(*args, **kwds)
  File "/home/serhiy/py/cpython-release/Lib/typing.py", line 695, in __getitem__
    _check_generic(self, params)
  File "/home/serhiy/py/cpython-release/Lib/typing.py", line 194, in 
_check_generic
    raise TypeError(f"{cls} is not a generic class")
TypeError: typing.Dict[int, typing.List] is not a generic class

It also fixes the following error:

>>> from typing import *
>>> T = TypeVar('T')
>>> Dict[T, List][str]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/serhiy/py/cpython-release/Lib/typing.py", line 241, in inner
    return cached(*args, **kwds)
  File "/home/serhiy/py/cpython-release/Lib/typing.py", line 703, in __getitem__
    subargs = tuple(subst[x] for x in arg.__parameters__)
  File "/home/serhiy/py/cpython-release/Lib/typing.py", line 703, in <genexpr>
    subargs = tuple(subst[x] for x in arg.__parameters__)
KeyError: ~T

and allows to simplify __eq__ and __hash__ for _SpecialGenericAlias. Currently 
it has a weird behavior in corner case:

>>> from typing import *
>>> from typing import T
>>> List == List[T]
True

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue40397>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to