从pylint中理解“太多的祖先”

时间:2014-04-03 10:10:20

标签: python pylint

example.py:

'''
demo too many ancestors 
'''
from flask_security.forms import RegisterForm
from wtforms.fields import TextField

class ExtendedRegisterForm(RegisterForm):
    '''An extended register form'''
    name = TextField('Name', [])

当我运行pylint时:

$ pylint -r n example.py
************* Module example
R:  7, 0: Too many ancestors (10/7) (too-many-ancestors)

这是什么意思,我该如何解决?

4 个答案:

答案 0 :(得分:23)

问题是你从一个拥有许多祖先的类继承:RegisterForm。在你的情况下,除了停止使用它之外,你不能做很多事情,这可能不是一个选择。因此,您可能希望为此类禁用此消息,例如:

class ExtendedRegisterForm(RegisterForm): # pylint: disable=too-many-ancestors

答案 1 :(得分:10)

除了源代码中的禁用指令外,您还可以通过--max-parents = commandline选项对其进行配置。您也可以在配置文件(.pylintrc)中指定它:

[DESIGN]
max-parents=15

正如您所看到的,我将它设置为15,因为Django(我的项目)中的多个类,特别是其视图类,将具有比默认值更深的层次结构。

答案 2 :(得分:8)

来自此处的文档:https://pylint.readthedocs.io/en/stable/technical_reference/features.html

  

太多 - 祖先(R0901):太多祖先(%s /%s)使用时   class有太多的父类,尝试减少这个以获得更简单   (这样更容易使用)课程。

答案 3 :(得分:1)

基本上添加到json或.pylintrc --max-parents='yourrequirednumber'

注意:默认为--max-parents=7

如果使用Visual Studio Code(VSC),则可以通过添加轻松地覆盖默认配置 下面的代码到settings.json

转到-> UserSettings ctrl+,(默认快捷方式)->单击...(更多操作)->打开settings.json->添加以覆盖此代码的默认设置:

"python.linting.pydocstyleArgs": ["--max-parents=25"]

注意2: 如果未安装pylint_django: $ pip install pylint-django