クラスのinit__機能の自己.__で__dict__の使用(ただし、コードは期待どおりにエラーなく動作します)。Python的:<em>スパイダー</em> IDEで新しいクラスをコーディングし、最終的な結果を確認するために<em>pylint</em>を使用している間、私はエラーメッセージに遭遇しました
コンテキスト:コンストラクタ関数では、私は新しいメンバー(かなりたくさん)を作りたいと思います。 ()のは、彼らが(すべてのdictあるとしましょう)同じ初期値をすべて設定して、(のは、10をしましょう)
class MyClass():
def __init__(self):
self.a = ...
self.b = ...
しかし、多くのメンバーの場合:通常、これらは、私は、このコーディングを使用するように、十分な数です
class MyClass():
def my_method(self):
print self.c
エラーをで:クラスでさらに
class MyClass(): def __init__(self): _vars = ["a", "b", "c", ...] for _var in _vars: self.__dict__[_var] = dict()
は、私が使用してメンバーに参照のうえした、私はそれを行うように誘惑されました(スパイダー中)pylint:
MyClass.my_method: 'MyClassの' のインスタンスには「c'memberを持っていない、このファイルにpylintを使用する場合
、私はというエラーメッセージを持っています。
ただし、コードはエラーなく、うまく動作します。私は問題なくメンバー 'c'にアクセスすることができます。
質問:これは適切なコーディングですか、またはメンバーを初期化するためのこのような方法を避けるべきですか?
を私はあなたがMyClass' 'で何をしようとしている正確にわからないんだけど、あなたは(' collections.defaultdictに投資する可能性があるように聞こえます) '。 http://docs.python.org/library/collections.html#collections.defaultdictをご覧ください。他の人が辞書であるインスタンス変数を作成するのではなく、self .__ dict__を変更することに関して何を話しているかに興味があります。 – Noah
@ノアありがとうノア、私はdefaultdictクラスを知らなかった。本当に面白いね!私は今、私が確かにコードのためのいくつかの "ツール"をコーディングしているのを見ています。これは、より良いコード化されたいくつかのPythonモジュールで作成されている可能性があります(例えば、defaultdictのように、はるかに複雑ではありません)。どうもありがとう。 – mhavel