1

パッケージで定義された一連のモジュールを使用してデータ操作を実行できるインタラクティブなシェルが必要です。たとえば、次のように入力できるようにしたいです。

$ Input('data.csv')
$ GroupBy('key')
$ Output('data.csv')

ここInputで、GroupByおよびOutputは、「グローバル」dataイテレータで暗黙的に動作するパッケージのすべてのモジュール/クラスです。これを行う簡単な方法は、引数として明示的に渡すことですが、バックグラウンドでdata発生することを制御したいdata(ユーザーが知らないうちに、計算コアとマップ削減全体に分散している可能性があります)。

これは私がこれまでに得た最も近いものです:

class env(object):
    def __init__(self):
            self.data = []
            code.interact(local=locals())

    def __iter__(self):
            return self.data

    def run(self, className, *args, **kwargs):
            c = globals()[className](*args, **kwargs)
            self.data = chain(self.data, c)

    def __getattr__(self, attrName, *args, **kwargs):
            return partial(self.run, attrName)

次に、パッケージ内で私__init__.pyは扇動しenvます。次に、残りのパッケージ モジュールを独自の名前空間 ( 、および など) にenv.pyインポートします。InputGroupByOutput

$ self.Input('data.csv')
$ self.GroupBy('key')
$ self.Output('data.csv')

selfとても近いですが、私は!を取り除きたいです。

env私にできることは、クラスを から継承させてからdictを実行させることだと思っていましcode.interact(local=self)たが、残念ながらこれはうまくいかないようですか?

Pythonic の方法でこれを達成する方法を教えてください (または、私がやろうとしていることが Pythonic ではない理由を説明し、代替手段を提供してくださいdata) builtins。モジュール...

tl、博士; パッケージのすべてのモジュールを、グローバル データへのアクセスを制御するクラス内にラップするにはどうすればよいですか?

4

0 に答える 0