0

こんにちは、私は Disco を初めて使用し、既存のコードをそれに統合しています。Disco は、マップ/リデュース関数をグローバル関数ではなくクラス内の関数として呼び出すことができますか? 次のコードは、より明確に説明している可能性があります。

class Segmenter(object):
    def map_fun(line, params):
        ....
    def reduce_fun(iter, params):
        ....
    def disco_mp(self):
        job = Job().run(input=["raw://word_to_segment_......"],
                        map=map_fun,
                        reduce=reduce_fun)
        ...

実行結果は

NameError: global name 'map_fun' is not defined

しかし、map_fun、reduce_fun をグローバル関数に変更すると、期待どおりに機能します。ただし、クラス関数として機能させる方法を見つける必要があります。それを行う方法はありますか?

ありがとう、

チャンドラー

4

2 に答える 2

0

静的メソッドが必要です。デコレータでこれを行うことができます:

class Segmenter(Job):
    map = staticmethod(map_fun)
    reduce = staticmethod(reduce_fun)

    @staticmethod
    def map_fun(line, params):
        ....

    @staticmethod
    def reduce_fun(iter, params):
        ....

    def disco_mp(self):
        job = self.run(input=["raw://word_to_segment_......"])

selfmap_fun と reduce_fun の両方にアクセスできないことに注意してください。これがparams存在する理由です。Job.runまた、 is nowself.runSegmenterextendsにも注意してくださいJob

于 2012-08-30T13:34:39.523 に答える
0

self.map_funと を使用したいようですself.reduce_fun。Python では、オブジェクトのメソッドにそのままの名前でアクセスすることはできません。を使用する必要がありますselfselfまた、これらのメソッドに引数を提供する必要があります。Python のチュートリアルを読んで、Pythonのクラスとメソッドの基本を理解してください。

(また、質問のタイトルが実際の質問と無関係なのはなぜですか?)

于 2012-08-30T06:21:41.380 に答える