继承的公共方法可以从 Pylint 的统计中排除吗?

2024-01-18

Pylint 一直报错(R: 73,0:MyLogging: Too many public methods (22/20))对于以下代码:

class MyLogging(logging.Logger):

    def foo(self):
        pass

    def bar(self):
        pass

起初我以为这是 Pylint 中的一个错误,因为MyLogging类正好有 22 行代码,但后来我意识到,它包含基类中的所有公共方法logging.Logger统计数据也增加了 20。

是否可以从 Pylint 统计中排除基类的公共方法?

PS:我知道我可以改变max-public-methods到一个更高的数字,或者添加一个一次性例外# pylint: disable=R0904


办法是有的,但没有一个是好的。

这是不可配置的:您可以检查 Pylint 中的代码设计分析.MisdesignChecker, 之内def leave_class:

for method in node.methods():
    if not method.name.startswith('_'):
        nb_public_methods += 1

上面的代码只是迭代所有不以“_”开头的方法,并将它们算作公共方法。

因此,我看到两种方法可以做你想做的事:

  1. fork Pylint 并修改此方法:

     for method in node.methods():
         if not method.name.startswith('_') and method.parent == node:
             nb_public_methods += 1
    

    method.parent- 定义该函数的类节点;也在你的leave_class函数有一个参数node- 这是类节点。

    比较它们就可以了解是否是当前班级。

  2. 在 Pylint 配置中禁用此规则并创建您自己的插件:

     MAX_NUMBER_PUBLIC_METHODS = 3
     class PublicMethodsChecker(BaseChecker):
         __implements__ = (IASTNGChecker,)
    
         name = 'custom-public-methods-checker'
    
         msgs = {
             "C1002": ('Too many public methods (%s/%s)',
                   'Used when class has too many public methods, try to reduce \
                    this to get a more simple (and so easier to use) class.'),
         }
    
         def leave_class(self, node):
             """check number of public methods"""
             nb_public_methods = 0
             print type(node)
             for method in node.methods():
                 if not method.name.startswith('_') and method.parent == node:
                     nb_public_methods += 1
             if nb_public_methods > MAX_NUMBER_PUBLIC_METHODS:
                  self.add_message('C1002',
                              node=node,
                              args=(nb_public_methods, MAX_NUMBER_PUBLIC_METHODS))
    

    基本上,这个实现是稍微修改的摘录设计分析.MisdesignChecker来自 Pylint 源代码。

有关插件的更多信息,请参阅帮助 pylint 理解它不理解的事情 http://www.logilab.org/blogentry/78354,以及 Pylint 源代码中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

继承的公共方法可以从 Pylint 的统计中排除吗? 的相关文章

  • Pandas apply 与 np.vectorize 从现有列创建新列的性能

    我正在使用 Pandas 数据框 并希望创建一个新列作为现有列的函数 我还没有看到关于之间速度差异的很好的讨论df apply and np vectorize 所以我想我会在这里问 熊猫apply 功能很慢 根据我的测量 在一些实验中如下
  • DataFrame 在函数内部修改

    我面临一个我以前从未观察到的函数内数据帧修改的问题 有没有一种方法可以处理这个问题 以便初始数据帧不被修改 def test df df tt np nan return df dff pd DataFrame data 现在 当我打印时d
  • Python:记录垃圾收集器

    我有一个 python 应用程序 有一些性能问题 我想将垃圾收集器的事件 特别是何时调用 添加到我的日志中 是否可以 thanks http docs python org library gc html gc set debug http
  • 子进程改变目录

    我想在子目录 超级目录中执行脚本 我需要首先进入该子目录 超级目录 我无法得到subprocess进入我的子目录 tducin localhost Projekty tests ve python Python 2 7 4 default
  • Python + PostgreSQL + 奇怪的ascii = UTF8编码错误

    我有包含字符的 ascii 字符串 x80 代表欧元符号 gt gt gt print x80 当将包含该字符的字符串数据插入数据库时 我得到 psycopg2 DataError invalid byte sequence for enc
  • Python的reduce()短路了吗?

    If I do result reduce operator and False 1000 得到第一个结果后它会停止吗 自从False anything False 相似地 result reduce operator or True 10
  • html 解析器 python

    我正在尝试解析一个网站 我正在使用 HTMLParser 模块 问题是我想解析第一个 a href 评论后 但我真的不知道该怎么做 所以我在文档中发现有一个函数叫做handle comment 但我还没有找到如何正确使用它 我有以下内容 i
  • 使用 Scipy imsave 将 Numpy 数组保存到图像时保留未更改的数据

    使用 Scipy 保存二维 Numpy 数组 单个值 时toimage or imsave像素值与 Numpy 数组中的像素值不完全匹配 相反 在某些区域 主要是边缘 图像算法似乎使用某种插值 是否有一个选项可以停止插值并保留准确的数据 例
  • Python 正则表达式部分匹配或“hitEnd”

    我正在编写一个扫描器 因此我将任意字符串与正则表达式规则列表进行匹配 如果我可以模拟 Java hitEnd 功能 不仅知道正则表达式何时不匹配 还知道何时匹配 这将非常有用 can t匹配 当正则表达式匹配器在决定拒绝输入之前到达输入末尾
  • Django 的 URL 覆盖率测试为 0%,为什么?

    使用姜戈鼻子 我对 URL 进行了测试 但 URL 覆盖率仍然为 0 为什么 python manage py 测试配置文件 这是我的报道 Name Stmts Miss Cover Missing profiles 0 0 100 pro
  • 如何使用 Pandas 将巨大的 CSV 转换为 SQLite?

    我有一个巨大的表 大约 60 GB 采用存档的 CSV 文件形式 我想将其转换为 SQLite 文件 我现在所做的事情如下 import pandas import sqlite3 cnx sqlite3 connect db sqlite
  • Matplotlib 图例不工作

    自从升级 matplotlib 以来 每当尝试创建图例时 我都会收到以下错误 usr lib pymodules python2 7 matplotlib legend py 610 UserWarning Legend does not
  • 如何检查列表是否为空?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 例如 如果通过以下内容 a 我如何检查是否a是空的 if not a print Lis
  • 为什么“return self”返回 None ? [复制]

    这个问题在这里已经有答案了 我正在尝试获取链的顶部节点getTopParent 当我打印出来时self name 它确实打印出了父实例的名称 然而 当我回来时self 它返回 None 为什么是这样 class A def init sel
  • smooth_idf 是多余的吗?

    The scikit learn 文档 http scikit learn org stable modules generated sklearn feature extraction text TfidfTransformer html
  • 大型数据集上的 Sklearn-GMM

    我有一个很大的数据集 我无法将整个数据放入内存中 我想在这个数据集上拟合 GMM 我可以用吗GMM fit sklearn mixture GMM 重复小批量数据 没有理由重复贴合 只需随机采样您认为机器可以在合理时间内计算的尽可能多的数据
  • Jupyter Notebook:没有名为 pandas 的模块

    我搜索了其他问题 但没有找到任何有帮助的内容 大多数只是建议您使用 conda 或 pip 安装 pandas 在我的 jupyter 笔记本中 我试图导入 pandas import pandas as pd 但我收到以下错误 Modul
  • issubclass() 对从不同路径导入的同一类返回 False

    目的是实现某种插件框架 其中插件是同一基类 即 A 的子类 即 B 基类使用标准导入加载 而子类使用 imp load module 从众所周知的包 即 pkg 的路径加载 pkg init py mod1 py class A mod2
  • 在Python 3.2中,我可以使用http.client打开并读取HTTPS网页,但urllib.request无法打开同一页面

    我想打开并阅读https yande re https yande re with urllib request 但我收到 SSL 错误 我可以使用以下方式打开并阅读页面http client用这个代码 import http client
  • 从数据集的给定日期范围中提取属于一天的数据

    我有一个数据集 日期范围为 2018 年 1 月 12 日到 8 月 3 日 其中包含一些值 维数为my df数据框是 my df shape 9752 2 每行包含半小时频率 第一行开始于2018 01 12 my df iloc 0 D

随机推荐