Class inheriting from property doesn't typecheck properly when used as a decorator
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
I have a custom class inheriting from property. When I go to use this as a decorator though mypy seems to miss that it's a property at all. This is with Python 3.6.3 and mypy 0.650.
Example:
class CustomProperty(property):
def __init__(self, fget=None, fset=None, fdel=None, doc=None):
super().__init__(fget, fset, fdel, doc)
class A:
def __init__(self) -> None:
self._val = 1
@CustomProperty
def val(self) -> int:
return self._val
@val.setter
def val(self, v: int) -> None:
self._val = v
def test_a() -> None:
print(A.val)
Running mypy on this gives the following output:
mypy minimal2.py
minimal.py:14: error: Name 'val' already defined on line 10
minimal.py:14: error: Name 'val' is not defined
minimal.py:20: error: "Type[A]" has no attribute "val"
Contrast this with the same code with the builtin property which typechecks fine:
class B:
def __init__(self) -> None:
self._val = 1
@property
def val(self) -> int:
return self._val
@val.setter
def val(self, v: int) -> None:
self._val = v
def test_b() -> None:
print(B.val)
It's possible that this is related to #1529 where @ilevkivskyi suggested that:
The original example now passes mypy, not sure however how useful the subclass can be (property is heavily special-cased in mypy), but at least the original bug is fixed, so closing this.
Is subclassing property frowned upon (or just not supported in mypy?).
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Riproduci il report con l'esempio minimal.py usando Python 3.6.3 e mypy 0.650, quindi confronta il caso del decorator CustomProperty con il caso della property builtin. Traccia la gestione da parte di mypy delle sottoclassi di property e dei setter dei decorator; il lavoro è completato quando la classe personalizzata supera il controllo dei tipi come la property builtin, senza gli errori duplicate-name o missing-attribute segnalati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- devtools
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 45/100