bug pylint - E1101 & E0102 lors de l'utilisation de @property + @ foo.setter
Question
Je pylint remarqué ne gère pas bien le cas:
@property
def foo(self):
return self._bar.foo
@foo.setter
def foo(self, foo_val):
self._bar.foo = foo_val
Bien qu'il soit une syntaxe de cas parfaitement valable depuis python2.6
Il dit que je défini foo deux fois, et ne comprend pas la syntaxe ".setter" (Donne E1101 & E0102).
Y at-il une solution de contournement pour cela sans avoir à modifier le code? Je ne veux pas désactiver les erreurs car ils sont importants pour d'autres endroits.
Y at-il un autre outil que je peux utiliser qui gère mieux? Je l'ai déjà vérifié pyflakes et il se comporte de la même manière. L'analyse de code PyDev semble traiter ce cas spécifique mieux, mais il ne vérifie pas les conventions, refactoring, et d'autres frais caractéristiques pylint fait, et je ne peux pas l'exécuter à partir d'un script externe (ou puis-je ??)
Merci!
La solution
Ceci est un billet http://www.logilab.org/ticket/51222 sur la projet pylint. Surveiller l'état est tout.
Autres conseils
Si vous ne souhaitez pas désactiver les erreurs au niveau mondial, vous pouvez les désactiver pour ces lignes spécifiques, par exemple:
def foo(self, foo_val): # pylint: disable-msg=E0102
Huh. Énervant. Et tous les principaux outils que je pouvais trouver (pyflakes, pylint, pychecker) présentent ce problème. On dirait que le problème commence dans le code octet, mais je ne peux pas obtenir dis
pour me donner un code d'octets pour les propriétés d'objet.
Il semble que vous seriez mieux si vous avez utilisé cette syntaxe:
# 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)
Voici un bel article de blog dessus. LOL-citation:
accesseurs appartiennent à la triste monde de Java et C ++.
signalé comme un bogue dans pyflakes , et il semble être fixé dans le coffre courant. Donc je suppose que la réponse (maintenant) est: pyflakes