私は現在、Python 2.7でコードを書いています。これには、2つのクラスメソッドと他の通常のメソッドがあるオブジェクトの作成が含まれます。この特定の組み合わせのメソッドを使用する必要があります。なぜなら、私が書いているコードの文脈がより大きくなっているからです。この質問には関係しませんので、深くは触れません。@classmethod変数が "定義されていない"のはなぜですか?
私の__init__関数内で、私はプール(マルチプロセッシングオブジェクト)を作成しています。その作成の中で、私はセットアップ機能を呼び出します。このセットアップ関数は@classメソッドです。 cls.variablename構文を使用して、このセットアップ関数でいくつかの変数を定義します。私が言及したように、私は自分のinit関数内で(プール作成の中で)このセットアップ関数を呼び出します。したがって、これらの変数は私が理解しているところに基づいて作成されるはずです。
私のコードの後半に、他のいくつかの関数が呼び出され、先ほどの@classmethodと同じオブジェクト内で別の@classメソッドを呼び出すようになりました。この@classメソッドでは、最初の@classmethodで作成したcls.variablesにアクセスしようとしています。しかし、Pythonは私のオブジェクトには属性 "cls.variable"がないことを伝えています(ここでは一般的な名前を使用していますが、私の実際の名前は自分のコードに固有です)。
いつも...私はおそらくかなり混乱していることを認識しています。ここでは同じ考えを説明するために、いくつかの(非常に)一般コードの例です:
class General(object):
def __init__(self, A):
# this is correct syntax based on the resources I'm using,
# so the format of argument isn't the issue, in case anyone
# initially thinks that's the issue
self.pool = Pool(processes = 4, initializer=self._setup, initargs= (A,)
@classmethod
def _setup(cls, A):
cls.A = A
#leaving out other functions here that are NOT class methods, just regular methods
@classmethod
def get_results(cls):
print cls.A
私はprint cls.A line
の同等に得るとき、私は取得していますエラーはこれです:使用方法を表示する
AttributeError: type object 'General' has no attribute 'A'
編集 私は私のコードでこれを呼んでいる方法のような次のとおりです:だから
G = General(5)
G.get_results()
、私は、私はプールを作成したオブジェクト(のインスタンスを作成しています。このコードのsetup関数を呼び出します)、get_resultsを呼び出します。
私は間違っていますか?
「General._setup」を呼び出したことがありますか? – chepner
特に、General.get_resultsというプロセスで 'General._setup'を呼びましたか? – user2357112
@chepner私は、init関数でPoolオブジェクトを作成しているときに呼び出すことにします。 – Ria