Pylint Bug -E1101和E0102使用@property + @foo.setter
题
我注意到皮层不能很好地处理以下情况:
@property
def foo(self):
return self._bar.foo
@foo.setter
def foo(self, foo_val):
self._bar.foo = foo_val
虽然这是一个完全有效的案例语法,因为Python2.6
它说我定义了两次Foo,并且不了解“ .setter”语法(给出E1101&E0102)。
是否有解决方法无需更改代码?我不想禁用错误,因为它们对其他地方很重要。
我还能使用其他工具可以更好地处理它吗?我已经检查了pyflakes,并且行为相同。 PYDEV的代码分析似乎可以更好地处理此特定情况,但是它没有检查pylint的约定,重构和其他酷功能,我无法从外部脚本(或可以?)运行它。
谢谢!
解决方案
这是票 http://www.logilab.org/ticket/51222 在皮革项目上。监视其状态。
其他提示
如果您不想在全球禁用错误,则可以将它们禁用这些特定行,例如:
def foo(self, foo_val): # pylint: disable-msg=E0102
嗯。恼人的。我可以找到的所有主要工具(Pyflakes,Pylint,Pychecker)都表现出此问题。看来问题在字节代码中开始,但我无法得到 dis
给我任何字节代码以供对象属性。
如果您使用此语法,看起来您会更好:
# 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)
这是一个 不错的博客文章 在上面。大声笑引用:
Getters和Setter属于Java和C ++的悲伤世界。
这是 报道是pyflakes中的虫子, ,并且似乎是在当前的中继中固定的。所以我想答案(现在)是:pyflakes!
不隶属于 StackOverflow