pylint bug - E1101 & E0102 in conseguenza dell'uso di @property + @ foo.setter
Domanda
I pylint notato non gestisce bene il caso di:
@property
def foo(self):
return self._bar.foo
@foo.setter
def foo(self, foo_val):
self._bar.foo = foo_val
Anche se è una sintassi caso perfettamente valido dal python2.6
Si dice ho definito foo due volte, e non capisce la sintassi ".setter" (Dà E1101 e E0102).
C'è una soluzione per questo, senza dover modificare il codice? Io non voglio disabilitare gli errori in quanto sono importanti per altri luoghi.
C'è qualche altro strumento che posso usare che gestisce meglio? Ho già controllato pyflakes e si comporta allo stesso modo. analisi del codice di PyDev sembra trattare questo caso specifico meglio, ma non controlla per convegni, refactoring, e altre caratteristiche fredde pylint fa, e non può essere eseguito da uno script esterno (o posso ??)
Grazie!
Soluzione
Si tratta di biglietti http://www.logilab.org/ticket/51222 sulla progetto pylint. Monitorare il suo stato.
Altri suggerimenti
Se non si desidera disattivare gli errori a livello globale, è possibile disattivarli per queste linee specifiche, ad esempio:
def foo(self, foo_val): # pylint: disable-msg=E0102
Huh. Fastidioso. E tutti i principali strumenti che ho potuto trovare (pyflakes, pylint, pychecker) presentano questo problema. Sembra che il problema inizia nel codice di byte, ma non riesco a ottenere dis
di darmi alcun codice byte per le proprietà degli oggetti.
Sembra che sarebbe meglio se si è utilizzato la seguente sintassi:
# Changed to longer member names to reduce pylint grousing
class HughClass(object):
def __init__(self, init_value):
self._hugh = init_value
def hugh_setter(self):
return self._hugh * 2
def hugh_getter(self, value):
self._hugh = value / 2
hugh = property(hugh_getter, hugh_setter)
Ecco un bell'articolo blog su di essa. LOL-citazione:
getter e setter appartengono al triste mondo di Java e C ++.
Questa è stata segnalato come un bug in pyflakes , e sembra essere fissato in tronco corrente. Quindi credo che la risposta (oggi) è:! Pyflakes