python / python/mypy

no error when overriding property with incompatible return type when the overridden property has another decorator

Offen
#17,393 1 Kommentar 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug topic-descriptors topic-inheritance
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

from contextlib import contextmanager
from typing import Iterator

@contextmanager
def foo() -> Iterator[None]:
    yield


class Bar:
    @property
    def asdf(self) -> int:
        return 2


class Baz(Bar):
    @property
    def asdf(self) -> str: # no error
        return ""

    @asdf.setter
    @foo()
    def asdf(self, new_value): ...

playground

removing the @foo() decorator makes the error appear:

main.py:16: error: Signature of "asdf" incompatible with supertype "Bar"  [override]
main.py:16: note:      Superclass:
main.py:16: note:          int
main.py:16: note:      Subclass:
main.py:16: note:          str
Found 1 error in 1 file (checked 1 source file)

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Führe den bereitgestellten Python-Reproducer aus und vergleiche ihn mit der Version, in der @foo() entfernt wurde. Verfolge, wie dekorierte Property-Setter während der Prüfung von Property-Überschreibungen behandelt werden; als erledigt gilt die Aufgabe, wenn mypy den inkompatiblen int-to-str-Override auch im dekorierten Fall meldet.

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
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.