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

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

3 ответов


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

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

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

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


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

[DESIGN]
max-parents=15

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