Star imports can't be redefined
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
Using mypy 0.820+dev.61c346230cf4960c9766f7c2b5bd3312b47f74da and Python 3.9.4:
# a.py
x: int
# and many more definitions
# b.py
from a import *
x: str # Name "x" already defined (possibly by an import)
reveal_type(x) # Revealed type is "builtins.int"
This caused us a lot of trouble in python/typeshed#5545 and leads to this horrible and hard to maintain import mess: https://github.com/python/typeshed/blob/6ee67483a30e178f243d3a9a5b5a9bb4b902901a/stdlib/socket.pyi
I understand the warning and I think it makes sense to have to suppress it with # type: ignore. But the the fact that the override behaves differently from runtime is quite problematic as evidenced by socket.py. This is an example from the standard library that relies on the fact that star imports can be overridden selectively.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginnen Sie mit der Reproduktion in a.py und b.py und vergleichen Sie anschließend, wie mypy den Star-Import und die darauf folgende x-Annotation im Vergleich zum Laufzeitverhalten von Python behandelt. Verwenden Sie das Beispiel socket.pyi als realen Anwendungsfall und fügen Sie einen Regressionstest hinzu, der das selektive Überschreiben und den dabei aufgedeckten Typ abdeckt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 42/100