web-dev-qa-db-ja.com

ピリントから「祖先が多すぎる」を理解する

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)

これはどういう意味ですか?どうすれば修正できますか?

22
jon

こちらのドキュメントから: https://pylint.readthedocs.io/en/stable/technical_reference/features.html

too-many-ancestors(R0901):祖先が多すぎます(%s /%s)クラスに親クラスが多すぎる場合に使用します。これを減らして、より単純な(そして使いやすい)クラスを取得してください。

8
jon

問題は、それ自体が(あまりにも)多くの祖先を持つクラスから継承することです:RegisterForm。あなたの場合、おそらくオプションではないそれを使用するのをやめる以外に、これについて多くをすることはできません。したがって、このクラスに対してこのメ​​ッセージを無効にすることができます。例:

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

ソースコードのディレクティブを無効にすることに加えて、-max-parents =コマンドラインオプションを使用してこれを構成できます。これは、構成ファイル(.pylintrc)で指定することもできます。

[DESIGN]
max-parents=15

ご覧のとおり、Django(私のプロジェクト)のクラス、特にそのビュークラスは、デフォルトの7よりも深い階層を持つ15に設定しました。

13
Hari Mahadevan

基本的にjsonまたは.pylintrcに追加します--max-parents='yourrequirednumber'

注:--max-parents=7がデフォルトです

Visual Studio Code(VSC)を使用している場合は、settings.jsonに以下のコードを追加することで、デフォルトの構成を簡単にオーバーライドできます。

-> UserSettings ctrl+,(デフォルトのショートカット)->クリック...(その他のアクション)-> openssettings.json->追加して上書きするデフォルト設定このコード:

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

注2:pylint_Djangoがインストールされていない場合:$ pip install pylint-Django

1
Joehoe