Name already defined error when using `property.setter` on a property declared with function-based syntax
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
When using function-based syntax to declare property (i.e. foo = property(get_foo)), mypy reports a "Name already defined" error when trying to reassign to it using property.setter (see below)
To Reproduce
- Save this code to a python file:
class X:
def __init__(self):
self._foo = 123
def get_foo(self) -> int:
return self._foo
foo = property(get_foo)
@foo.setter
def foo(self, value: int) -> None:
self._foo = value
- Run mypy on it
- See output.
Expected Behavior
No errors. I think this should apply not just to properties but also to any other custom descriptors.
Actual Behavior
I got an error
main.py:10: error: Name "foo" already defined on line 8
Found 1 error in 1 file (checked 1 source file)
Your Environment
- Mypy version used: both 0.910 and latest
- Mypy command-line flags: None
- Mypy configuration options from
mypy.ini(and other config files): None - Python version used: 3.9
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 mit dem gemeldeten Python-Reproducer und führe mypy aus, um die Diagnose „Name already defined“ zu bestätigen. Verfolge nach, wie funktionsbasierte Properties und die Neuzuweisung durch @foo.setter analysiert werden, einschließlich der Frage, ob benutzerdefinierte Deskriptoren denselben Pfad durchlaufen; erledigt ist die Aufgabe, wenn der Reproducer und gleichwertige Deskriptorfälle ohne den Fehler wegen doppelter Namen typgeprüft werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 38/100