[issue38459] typing: Classes that inherit `Generic[...]` indirectly aren't considered generic.
John Lennon
report at bugs.python.org
Sun Oct 13 04:31:24 EDT 2019
New submission from John Lennon <enjigglypuffcx at gmail.com>:
Given the file `example.py` with the following contents:
```python
from typing import Generic, TypeVar
KT = TypeVar("KT")
VT = TypeVar("VT")
class GenericMapping(Generic[KT, VT]):
pass
class SomeImplMapping(GenericMapping):
pass
a: GenericMapping[int, float]
b: SomeImplMapping[int, float]
```
I would expect `SomeImplMapping` to be generic as well as `GenericMapping`. However, currently this code fails with the following error:
```sh
Traceback (most recent call last):
File "adt.py", line 18, in <module>
b: SomeImplMapping[int, float]
File "/usr/local/lib/python3.7/typing.py", line 254, in inner
return func(*args, **kwds)
File "/usr/local/lib/python3.7/typing.py", line 841, in __class_getitem__
_check_generic(cls, params)
File "/usr/local/lib/python3.7/typing.py", line 204, in _check_generic
raise TypeError(f"{cls} is not a generic class")
TypeError: <class '__main__.SomeImplMapping'> is not a generic class
```
If I understand everything correctly, that's because `typing` doesn't check bases of the class to have `__parameters__` attribute:
https://github.com/python/cpython/blob/master/Lib/typing.py#L210
I did not found the restriction that only direct childs of `Generic[..]` class can be generic in the docs, so I think this is a bug.
----------
components: Library (Lib)
messages: 354568
nosy: John Lennon
priority: normal
severity: normal
status: open
title: typing: Classes that inherit `Generic[...]` indirectly aren't considered generic.
type: behavior
versions: Python 3.7
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue38459>
_______________________________________
More information about the Python-bugs-list
mailing list