パッケージで定義された一連のモジュールを使用してデータ操作を実行できるインタラクティブなシェルが必要です。たとえば、次のように入力できるようにしたいです。
$ 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
インポートします。Input
GroupBy
Output
$ self.Input('data.csv')
$ self.GroupBy('key')
$ self.Output('data.csv')
self
とても近いですが、私は!を取り除きたいです。
env
私にできることは、クラスを から継承させてからdict
を実行させることだと思っていましcode.interact(local=self)
たが、残念ながらこれはうまくいかないようですか?
Pythonic の方法でこれを達成する方法を教えてください (または、私がやろうとしていることが Pythonic ではない理由を説明し、代替手段を提供してくださいdata
) builtins
。モジュール...
tl、博士; パッケージのすべてのモジュールを、グローバル データへのアクセスを制御するクラス内にラップするにはどうすればよいですか?