猿问

如何禁用任何使用我的函数的 pylint 检查?

我制作了一个classproperty描述符,每当我使用用它装饰的函数时,我都会收到多个pylint检查错误。


这是一个带有示例装饰函数的示例类:


class Bar:

    """

    Bar documentation.

    """

    # pylint: disable=no-method-argument


    @classproperty

    def foo():

        """

        Retrieve foo.

        """

        return "foo"

多亏了描述符,我可以调用Bar.foo并获取返回的字符串foo。


不幸的是,每当我将这样的函数用于稍微复杂的项目(例如返回对象实例的函数)时,pylint就会开始抱怨诸如no-memberor之类的东西unexpected-keyword-arg,仅仅是因为它认为Bar.foo是一个方法,而不是一个包装的classproperty对象。


我想禁用任何使用我的函数的代码的警告- 我绝对不能允许# pylint: disable每次使用classproperty-wrapped 方法时都必须编写。我该怎么做呢pylint?或者也许我应该改用其他 linter?


以下是由于上述原因生成的警告示例:


class Bar:

    """

    Bar documentation.

    """

    # pylint: disable=no-method-argument


    @classproperty

    def foo():

        """

        Retrieve an object.

        """

        return NotImplementedError("Argument")


print(Bar.foo.args)

pylint抱怨E1101: Method 'foo' has no 'args' member (no-member)(即使我知道它肯定有),我想完全禁用任何使用Bar.foo.args或类似的模块/类/函数的警告。


对于任何感兴趣的人,这里是描述符的最小实现classproperty:


class classproperty:

    """

    Minimal descriptor.

    """

    # pylint: disable=invalid-name


    def __init__(self, func):

        self._func = func


    def __get__(self, _obj, _type):

        return self._func()


开心每一天1111
浏览 92回答 2
2回答

慕村225694

我设法通过将项目类型提示为以下内容来创建一个肮脏的黑客None:class Bar:    """    Bar documentation.    """    # pylint: disable=no-method-argument,function-redefined,too-few-public-methods    foo: None    @classproperty    def foo():        """        Retrieve an object.        """        return NotImplementedError("Argument")我宁愿避免使用这样的代码,因为由于循环导入问题(因此None),我实际上无法导入应该进行类型提示的项目,但它的技巧pylint很好。

婷婷同学_

据我所知,这是不可能的。我还没有找到在pylint的配置中解决这个问题的方法。我能找到的最接近的是选项property-classes,但它只影响invalid-name检查器,所以不是我们在这里寻找的::property-classes:  List of decorators that produce properties, such as abc.abstractproperty. Add  to this list to register other decorators that produce valid properties.  These decorators are taken in consideration only for invalid-name.  Default: ``abc.abstractproperty``也许这是一个值得直接询问pylint的开发人员的问题。在我看来,它可以通过转换插件来解决(也许这是为了灵感?)。Pylint可以很好地处理@property装饰器,所以像这里建议的那样@classproperty,也应该是可行的。
随时随地看视频慕课网APP

相关分类

Python
我要回答