忽略继承类

时间:2017-02-09 14:13:14

标签: python pylint

我在使用ODM(对象文档映射器)时遇到这种情况。它是uMongo,但使用MongoEngine或SQL-Alchemy会产生同样的问题。

基本上,由于类是动态构造的,因此pylint引发了许多误报。

用例1:继承动态添加的方法

考虑这个简化的案例:

class Base():
    """Base class"""

class BusinessClass(Base)
    """The class I'm working with"""

Base获取了大量动态添加的属性/方法,以便与数据库一起使用,例如findfind_one,... BusinessClass只是一个示例,我有很多。使用代码时,我的所有业务类都会获得动态添加到Base的属性。 pylint不知道,因此是误报。

我看到两种使用pylintrc消除这些误报的方法。

1 - generated-members

将所有这些属性列入黑名单:

[TYPECHECK]
generated-members=find,find_one,...

但是

  • 我需要指定整个属性列表。它有点长但相当静止。我能做到。

  • 在所有类中都会忽略它们,即使它们不从Base继承,所以如果我在任何随机类中调用其中一个,我都不会收到警告。

    < / LI>

2 - ignored-classes

将商务课程列入黑名单

[TYPECHECK]
ignored-classes=BusinessClass,...

但是

  • 我需要指定整个列表,这是一个阻止程序。这是我的数据模型。它在不断发展。

用例2:在反序列化字段上调用方法

框架允许我定义字段,如下所示:

class BusinessClass(Base)
    """The class I'm working with"""

    name = StringField()

StringField反序列化为字符串,所以我可以这样做:

`my_object.name.split()`

但是我收到no-member错误,因为StringField本身没有split方法。

1 - generated-members

generated-members解决方案不适用于此处。我无法列出自定义字段提供的所有简单类型(字符串,整数,...)和业务对象的所有方法。我不妨删除整个no-member规则。

2 - ignored-classes

我可以列出ignored-classes中的所有现有字段,但这可能是一件苦差事。

我想做什么

理想情况下,我会写

[TYPECHECK]
ignored-classes=Base,Field

pylint也会忽略子类。

这样,

  • 我没有很长的属性列表,这些属性在所有类上都被忽略,即使是那些不从Base Field继承的属性。

  • 我不需要维护业务类和字段类的列表。

这可能吗?

如果没有,这不是很有意义吗?我很确定pylint在技术上可以做到这一点。

还是有其他方法我错过了吗?

目前,我找到的最佳解决方案是在案例1(列出框架提供的所有特殊方法)中使用generated-members,在案例2中使用ignored-classes(列出框架提供的所有字段)。< / p>

0 个答案:

没有答案