6

我注意到 pylint 不能很好地处理以下情况:

@property
def foo(self):
   return self._bar.foo

@foo.setter
def foo(self, foo_val):
   self._bar.foo = foo_val

尽管自 python2.6 以来它是一个完全有效的 case 语法

它说我定义了 foo 两次,并且不理解“.setter”语法(给出 E1101 和 E0102)。

有没有无需更改代码的解决方法?我不想禁用错误,因为它们对其他地方很重要。

有没有其他工具可以更好地处理它?我已经检查了 pyflakes,它的行为方式相同。PyDev 的代码分析似乎可以更好地处理这种特定情况,但它不会检查约定、重构和 pylint 所做的其他很酷的功能,而且我无法从外部脚本运行它(或者我可以吗??)

谢谢!

4

4 回答 4

4

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

def foo(self, foo_val): # pylint: disable-msg=E0102
于 2010-10-20T20:27:48.177 回答
3

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

于 2010-11-23T07:27:59.630 回答
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)

这是一篇不错的博客文章。大声笑-报价:

Getter 和 setter 属于 Java 和 C++ 的悲惨世界。

于 2010-10-20T18:19:46.063 回答
0

这被报告为 pyflakes 中的错误,并且似乎已在当前主干中修复。所以我想答案(现在)是:pyflakes!

于 2012-03-31T22:42:27.490 回答