首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何处理Pylint的“太多实例-属性”消息?

如何处理Pylint的“太多实例-属性”消息?
EN

Stack Overflow用户
提问于 2014-06-26 15:27:12
回答 4查看 65.1K关注 0票数 75

我刚刚尝试用Pylint链接一些代码,最后一个错误是

代码语言:javascript
运行
复制
R0902: too-many-instance-attributes (8/7)

我理解限制实例属性数量的理由,但7个似乎有点低。我也意识到,林特不应该有最后的话。不过,我想知道我应该做些什么,而不是:

代码语言:javascript
运行
复制
def __init__(self, output_file=None, output_dir=None):
    """
    Set the frobnicator up, along with default geometries
    """

    self.margin = 30

    self.pos = [0, 0]
    self.sep = [5, 5]

    self.cell = [20, 20]

    self.frobbr = library.Frobbr()

    page = self.frobbr.get_settings('page')

    self.lim = [page.get_width() - self.margin,
                page.get_height() - self.margin]

    self.filename = output_file
    self.moddir = output_dir

我应该把几何图形打包成一个小块,做些别的事情来阻止Pylint的抱怨,还是忽略它(这是我真的不想做的)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-06-26 15:45:23

linter的工作是让您意识到代码中的潜在问题,正如您在问题中所说的,它不应该是最后一个字。

如果您考虑了pylint必须说什么,并决定对于这个类来说,您所拥有的属性是适当的(在我看来是合理的),那么您可以通过在类中添加禁用注释来抑制错误,并表明您已经考虑过这个问题:

代码语言:javascript
运行
复制
class Frobnicator:

    """All frobnication, all the time."""

    # pylint: disable=too-many-instance-attributes
    # Eight is reasonable in this case.

    def __init__(self):
        self.one = 1
        self.two = 2
        self.three = 3
        self.four = 4
        self.five = 5
        self.six = 6
        self.seven = 7
        self.eight = 8

这样,你既不会忽视Pylint,也不会忽视它的奴隶;您将它用作有用但容易出错的工具。

默认情况下,在本地禁用检查时,Pylint将生成一条信息消息:

代码语言:javascript
运行
复制
 Locally disabling too-many-instance-attributes (R0902) (locally-disabled)

您可以通过以下两种方式之一防止该消息的出现:

  1. 在运行pylint时添加disable=标志: $ pylint --禁用=本地禁用的frob.py
  2. pylintrc配置文件中添加一个指令: 消息控制禁用=本地禁用
票数 108
EN

Stack Overflow用户

发布于 2016-02-12 20:48:27

这是一种意识形态上的反对,但就我个人而言,我倾向于使这种变化尽可能具有普遍性。如果在一个文件中7是不够的,而且我选择在这里允许它,为什么不到处都允许呢?我并不总是对皮棉的规定进行全面的修改,但我至少考虑过了。为此,如果要进行全面更改,请在.pylintrc文件中更改DESIGN部分中的“更改”( max-attributes=7 )。

因为我认为7的整体水平有点低,所以我改变了:

代码语言:javascript
运行
复制
[DESIGN]
max-attributes=7

代码语言:javascript
运行
复制
max-attributes=12
票数 33
EN

Stack Overflow用户

发布于 2014-06-27 07:21:27

零比雷埃夫斯的答案是一个很好的答案。尽管如此,由于您为init方法提供了很少的上下文,甚至不是一个真实的类名,所以很难肯定,但是我要说,文件名和moddir与边边、位置等无关。

IO操作通常最好隔离为函数,而不是方法。它们通常是许多不同的格式和序列化选项,大多数情况下,您不希望将它们与对象逻辑(方法)混合。添加一个新的IO函数,它接受一些文件、字符串、blob或其他东西,并返回被编码的对象,这比维护一个具有处理许多不同IO操作的方法的对象要容易得多。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24434510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档