pylint错误 - 使用@property + @foo.setter时的E1101与E0102
我注意到pylint在处理以下情况时表现得不太好:
@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提供的其他一些很酷的功能,而且我不能从外部脚本运行它(或者我可以吗??)
谢谢!
4 个回答
1
唉,真烦人。我找到的所有主要工具(比如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)
这里有一篇不错的博客文章,哈哈,里面有句名言:
获取器和设置器属于Java和C++那个悲惨的世界。
4
如果你不想在全局范围内关闭错误提示,可以只针对这些特定的代码行关闭它们,比如:
def foo(self, foo_val): # pylint: disable-msg=E0102
3
这是关于pylint项目的一个问题单,链接是 http://www.logilab.org/ticket/51222。可以关注一下它的进展情况。