5

編集:これはばかげた間違いです。答えを見てください。ただし、私のinitselfメソッドは変数を定義していません。

パイプラインの段階である python クラスがいくつかあります。それらは基本クラスから継承します。

class StageBase(object):
    key = Segments.NONE
    _preprocessors = []

    def __init__():
        self.closing = False
        self.working = False
        self._que = None
        self._working_lock = None
        self._que_lock = None

    #whole bunch of other methods

継承クラスは と をオーバーライドkeyします_preprocessors。明示的なメソッドを追加する前は__init__()、すべて正常に機能していましたが、次のエラーが発生しました。

TypeError: __init__() takes no arguments (1 given)

エラーの行は、オーバーライドする行です_preprocessors(この例では、このクラス変数は、このステージの前に実行する必要がある他のステージを表します)。

このエラーをスローするクラスの例:

class StaticPageStage(StageBase):
    key = Segments.STATICPAGE
    _preprocessors = [FacebookGraphStage(), ]

    def __init__():
        pass

    def process(self, data):
        data = self._preprocess(data)
        return self.handle_results(tuple(x for x in data))

誰でもこれを修正する方法を教えてもらえますか?

4

3 に答える 3

8

selfデフォルトのパラメーターを__init__次のように追加する必要があります。

def __init__(self):
于 2011-04-06T16:08:52.283 に答える
2

initの署名には、少なくとも 1 つの引数が必要です。

def __init__(self):
    pass

ここで、エラーはおそらく FacebookGraphStage から発生しています。問題を解決するには、initメソッド (およびファイル内の他のメソッド) を確認してください。

于 2011-04-06T16:10:54.397 に答える
1

関数がパラメーターを取り込まない場合でも、クラス内の関数定義内で常にself引数を使用します。selfすべての関数に最初のパラメーターとして渡されるため、関数__init__がそれを受け入れていないというエラーが表示されます。

ここにいくつかの(うまくいけば)動作するコードがあります:

class StageBase(object):
    key = Segments.NONE
    _preprocessors = []

    def __init__(self):
        self.closing = False
        self.working = False
        self._que = None
        self._working_lock = None
        self._que_lock = None

    #whole bunch of other methods


class StaticPageStage(StageBase):
    key = Segments.STATICPAGE
    _preprocessors = [FacebookGraphStage(), ]

    def __init__(self):
        pass

    def process(self, data):
        data = self._preprocess(data)
        return self.handle_results(tuple(x for x in data))
于 2011-04-06T16:09:55.893 に答える