[解決済み] 動的属性を持つクラスに対するPylint警告E1101: 'Instance of .. has no ... member'を回避する。
質問
以下のような関数を想像してください。
動的に
を使用してオブジェクトに属性を追加します。
setattr
. このようにする理由は、ある外部構造(例えば、与えられたパラメータツリー)をオブジェクトにマッピングしたいからです。
my_object = SomeClass()
apply_structure(my_object, some_descriptor)
my_object.device1.enabled = True
技術的にはうまくいくのですが、当然ながらPylintは'device1'が
SomeClass
.
警告を無効にすることもできますが、それは良くありません(スペルミスなどで属性が存在しない場合、すべてのケースで警告が出るようにしたいからです)。
オブジェクトに動的にメンバーを追加する際に、警告が発生しない一般的かつ合法的な(Pylint-proof)方法はありますか?
または のみPylintを無効にすることはできますか? オブジェクト 行/ブロック/ファイルではなく、?
説明 :
後でハードコーディングされた属性にアクセスする予定なのに、なぜオブジェクトに動的に属性を装備しなければならないのかと思うかもしれません。
その理由は、プログラムの動的な部分(ここで装飾が行われる)と、静的な部分(ここで装飾が行われる)があるからです。 専門的 ある特定の シナリオ . だから私は できる このシナリオのために静的クラスを作成することもできますが、多くの場合、それは過剰な作業となります。
以下は 専門的 のコードは、バスに接続されたデバイスのパラメータにアクセスできるようにするかもしれません。
class MyDeviceHandler:
on_get_some_subtree_element(self):
return _some_internal_value
on_set_some_subtree_element(self, value):
_some_internal_value = value
dev = MyDeviceHandler()
decorate_object_with_device_structure(dev, 'some/attached/device')
dev.some.subtree.element = 5 <--- will call the set-callback
x = dev.some.subtree.element <--- will call the get-callback
ということで、背後の構造
'some/attached/device'
は恣意的で非常に複雑かもしれないので、クラス構造で再現するのは避けたい。
この警告をなくす一つの方法として、このような場合、「Subject.php」を作成/アクセスし、「Subject.php」を削除する必要があります。
dict
ベースのツリーです。
dev['some']['subtree']['element'] = 5
しかし、これでは書くのも大変だし、読むのも気持ち悪い。Pylintを黙らせるためにしか、こんなことはしない。
解決方法は?
このページ は、このエラーについて説明し、コードに直接対処する簡単な方法を示しています。
オブジェクト(変数、関数、...)が存在しないメンバーに対してアクセスされたときに使用されます。
誤認識。このメッセージは、動的に作成され、アクセスされた時点で存在するオブジェクトメンバーを報告する場合があります。
あるコメンテーターは、ファイルの先頭の1行で無効にすることができると述べています。
# pylint: disable=no-member
. を使うことができることもわかりました。
# pylint: disable=E1101
をベースに
このredditのエントリ
.
関連
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Python百行で韓服サークルの画像クロールを実現する
-
PythonによるExcelファイルの一括操作の説明
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
Pythonショートビデオクローラーチュートリアル
-
Python LeNetネットワークの説明とpytorchでの実装
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み] PythonでMutableな名前付きタプルは存在するのか?