我在使用ODM(对象文档映射器)时遇到这种情况。它是uMongo,但使用MongoEngine或SQL-Alchemy会产生同样的问题。
基本上,由于类是动态构造的,因此pylint引发了许多误报。
考虑这个简化的案例:
class Base():
"""Base class"""
class BusinessClass(Base)
"""The class I'm working with"""
Base
获取了大量动态添加的属性/方法,以便与数据库一起使用,例如find
,find_one
,... BusinessClass
只是一个示例,我有很多。使用代码时,我的所有业务类都会获得动态添加到Base
的属性。 pylint
不知道,因此是误报。
我看到两种使用pylintrc消除这些误报的方法。
generated-members
将所有这些属性列入黑名单:
[TYPECHECK]
generated-members=find,find_one,...
但是
我需要指定整个属性列表。它有点长但相当静止。我能做到。
在所有类中都会忽略它们,即使它们不从Base
继承,所以如果我在任何随机类中调用其中一个,我都不会收到警告。
ignored-classes
将商务课程列入黑名单
[TYPECHECK]
ignored-classes=BusinessClass,...
但是
框架允许我定义字段,如下所示:
class BusinessClass(Base)
"""The class I'm working with"""
name = StringField()
StringField反序列化为字符串,所以我可以这样做:
`my_object.name.split()`
但是我收到no-member
错误,因为StringField
本身没有split
方法。
generated-members
generated-members
解决方案不适用于此处。我无法列出自定义字段提供的所有简单类型(字符串,整数,...)和业务对象的所有方法。我不妨删除整个no-member
规则。
ignored-classes
我可以列出ignored-classes
中的所有现有字段,但这可能是一件苦差事。
理想情况下,我会写
[TYPECHECK]
ignored-classes=Base,Field
和pylint
也会忽略子类。
这样,
我没有很长的属性列表,这些属性在所有类上都被忽略,即使是那些不从Base
Field
继承的属性。
我不需要维护业务类和字段类的列表。
这可能吗?
如果没有,这不是很有意义吗?我很确定pylint
在技术上可以做到这一点。
还是有其他方法我错过了吗?
目前,我找到的最佳解决方案是在案例1(列出框架提供的所有特殊方法)中使用generated-members
,在案例2中使用ignored-classes
(列出框架提供的所有字段)。< / p>