-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Closed
Closed
Copy link
Labels
Description
Bug Report
The stubgen command generates an interface with invalid syntax for a data class that inherits from another class located in a different file.
To Reproduce
- Create a fresh virtual environment with Python
>=3.7and installmypy==0.941:
python3.9 -m venv venv
source venv/bin/activate
pip install -U pip
pip install mypy==0.941- Create a file named
a.pywith the following content:
class A:
pass- Create a file named
b.pyin the same directory with the following content:
from dataclasses import dataclass
from a import A
@dataclass
class B(A):
c: str- Run
stubgen b.py -o . - Run
python b.pyi
The generated b.pyi file has the following content:
from a import A
class B(A):
c: str
def __init__(self, *, c, **) -> None: ...Notes:
- The stub generation works correctly if we don't annotate the class with
@dataclass. - The stub generation works correctly if the superclass
Ais in the same file. - The stub generation works correctly if
Bdoesn't inherit fromA.
Expected Behavior
The generated b.pyi file has valid Python syntax and the python command executes without errors.
Actual Behavior
The generated b.pyi file doesn't have valid Python syntax and the command python b.pyi produces the following error:
File "/path/to/sandbox/b.pyi", line 5
def __init__(self, *, c, **) -> None: ...
^
SyntaxError: invalid syntaxYour Environment
- Mypy version used:
0.941. Reproducible with0.940as well. Cannot reproduce with0.931. - Mypy command-line flags:
-o - Mypy configuration options from
mypy.ini(and other config files): None - Python version used:
3.9.0. Also reproduced with3.7.12,3.8.5and3.10.0. Cannot reproduce with3.6.9. - Operating system and version:
Ubuntu 20.04.3 LTS. Also reproduced withmacOS Big Sur 11.5.2 pip listoutput for Python 3.9.0:
$ pip list
Package Version
----------------- -------
mypy 0.941
mypy-extensions 0.4.3
pip 22.0.4
setuptools 49.2.1
tomli 2.0.1
typing_extensions 4.1.1