Понимание "Слишком много предков" из 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)

Что это значит и как я могу его исправить?

Ответ 1

Из документации здесь: http://docs.pylint.org/features.html

слишком много-предков (R0901): Слишком много предков (% s/% s) Используется, когда класс имеет слишком много родительских классов, попробуйте уменьшить это, чтобы получить более простой (и так проще в использовании).

Ответ 2

Проблема в том, что вы наследуете от класса, который сам (тоже) много предков: RegisterForm. В вашем случае вы не можете много обойти это, кроме того, чтобы остановить его, что, вероятно, не является вариантом. Поэтому вы можете отключить это сообщение для этого класса, например:

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

Ответ 3

В дополнение к директивам отключения в исходном коде вы можете настроить это через параметр -max-parents = commandline. Вы также можете указать это в конфигурационном файле (.pylintrc):

[DESIGN]
max-parents=15

Как вы можете видеть, я установил его равным 15, так как в Django (мой проект), особенно в его классах классов, будет много иерархии, которые будут глубже, чем значение по умолчанию.

Ответ 4

в основном добавьте в json или .pylintrc --max-parents='yourrequirednumber'

Примечание: --max-parents=7 по умолчанию

При использовании кода Visual Studio (VSC) вы можете легко переопределить конфигурацию по умолчанию, добавив приведенный ниже код в файл settings.json.

Перейдите → UserSettings ctrl+, (ярлык по умолчанию) → нажмите... (дополнительные действия) → открыть settings.json → Добавить, чтобы перезаписать настройки по умолчанию этого кода:

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

ПРИМЕЧАНИЕ2: если pylint_django не установлен: $ pip install pylint-django