Attribute narrowing isn't aware of side effects
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
This code:
class Foo:
def __init__(self) -> None:
self.dirty = False
def test_source() -> None:
foo = Foo()
def bar() -> None:
foo.dirty = True
assert foo.dirty is False
bar()
assert foo.dirty is True
print("unreachable?")
produces the warning: main.py:17: error: Statement is unreachable, when running mypy --warn-unreachable test.py on 0.780.
Running the same through mypy 0.770 works fine and doesn't produce a warning.
(Also, running the example with pytest -s test.py prints unreachable?, because obviously this line is not unreachable when running the code in python).
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
Beginne damit, das mitgelieferte Beispiel mit mypy 0.780 und 0.770 unter Verwendung von --warn-unreachable auszuführen, und verfolge dann die an der Closure beteiligte Attribut-Narrowing-Logik, die foo.dirty zuweist. Vergleiche die Behandlung von Seiteneffekten zwischen diesen Versionen; abgeschlossen ist die Aufgabe, wenn das aktuelle Verhalten print("unreachable?") nicht mehr als unerreichbar meldet und dabei gültiges Narrowing beibehält.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Aktiv
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 50/100