Pyflake nie zajmuje się bardzo dobrze z następującym kodem:

@property
def nodes(self):
    return self._nodes

@nodes.setter
def nodes(self, nodes):
    """
    set the nodes on this object.
    """
    assert nodes != []  # without nodes no route..

    self.node_names = [node.name for node in nodes]
    self._nodes = nodes

Korzystanie z VIM i Syntastic, który używa PFlake, otrzymuję następujący błąd:

    W806 redefinition of function 'nodes' from line 5

Więc dostaję ostrzeżenia o @nodes.setter, ponieważ przedefiniowałem nodes.

Jak wyłączyć to bezużyteczne ostrzeżenie, ponieważ ten kod jest poprawny? Lub jaki Python Checker zajmuje się poprawnie tym kodem?

Aktualizuj

Wpadłem w pewne problemy, gdy zrefleksję mój kod, ponieważ właściwości i funkcje mają różne zachowanie dziedziczenia. Dostęp do właściwości klasy bazowej jest inna. widzieć:

Więc teraz mają tendencję do unikania tej składni i zamiast tego używać odpowiednich funkcji.

11
Stephan 24 wrzesień 2012, 14:48

3 odpowiedzi

Najlepsza odpowiedź

Różne poprawki, które mogą zostać wydane w pewnym momencie:

Ostatni wydaje się najbliżej wydania, ponieważ Divmod jest projektem macierzystym dla pyflakes.

Inne niż łatanie pakietu, zawsze możesz pracować w tym problemie:

@property
def nodes(self):
    return self._nodes

@nodes.setter
def _nodes_setter(self, nodes):    # FIXME: pyflakes
    ...

Niestety, spowoduje to zanieczyszczenie przestrzeni nazw klasy.

3
ecatmur 24 wrzesień 2012, 11:08

Jest Otwórz żądanie pull na tracker Pyflake Emiss, który zawiera łatę do tego problemu; Możesz Pobierz łatką wersję z GitHub lub zastosuj łatkę ręcznie.

5
Martijn Pieters 24 wrzesień 2012, 11:07

Pobiegłem do tego samego problemu, a skutecznie stłumić tylko tę konkretną instancję, dodałem linię # Noqa na końcu linii, w której dodałem dekorator. W takim przypadku powinien wyglądać

@nose.setter  #  NOQA 

I to naprawiło dla mnie problemy. To nie jest idealne, ale dla moich potrzeb było wystarczające.

Zamiast tłumiących wszystkie ostrzeżenia W806, jest to zrobione, aby złapać inne instancje, w których może to być naprawione.

0
tkao 15 styczeń 2013, 00:31