pylint bug - E1101&使用@property + @ foo.setter时E0102

时间:2010-10-20 16:17:51

标签: python pydev pylint pyflakes

我注意到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 个答案:

答案 0 :(得分:4)

如果您不想全局禁用错误,可以为这些特定行禁用它们,例如:

def foo(self, foo_val): # pylint: disable-msg=E0102

答案 1 :(得分:2)

这是pylint项目中的票证http://www.logilab.org/ticket/51222。监控它的状态。

答案 2 :(得分: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)

这是一个nice blog article。 LOL引号:

  吸气鬼和二传手属于悲伤   Java和C ++世界。

答案 3 :(得分:0)

这是reported as a bug in pyflakes,它似乎在当前主干中得到修复。所以我猜答案(现在)是:pyflakes!