2011-05-13 7 views
0

私はtelnet/pexpect経由でセンサーにログインし、データコレクターとして機能する機能を持っています。オブジェクトを抽象化するためのエレガントな方法は何ですか?

ログインする部分を書き換えたり、データを取得したり、関連する出力を解析する(pexpect)必要はありません。最初の読み取りが

  • が返されるまでの平均を取る

    • 時間:しかし、私はこのコードと、それは例えば

      を収集したデータと異なることを行う必要があり、私がする必要があるかもしれません

    • ステータス(データの1つ)を返すか、センサ の読み取りを返します(これは別の部分の データです)。fr出力を

    最終的には、ログインして出力を解析する必要があり、その部分に1つのコードブロックを使用します。

    コードの上位にあり、瞬時に使用されています。私がそれを呼び出すとき、私はどのタイプのデータを収集する必要があるのか​​、それはそれを知っています。オブジェクトを構築するのは面倒です。

    私の使い方は、単一の関数にもっと多くの引数を追加してしまいました。

    アイデア?

  • +0

    Pythonには、function、object、class、moduleのようなグローバルな構文しかありません。 「オブジェクトを構築するのはあまりにも不器用です」と思うものは何ですか? – Malvolio

    +0

    このように、機能的には、私はメソッドのように使用し、一度メソッドを実行する必要があります。そのためにクラスをインスタンス化するのは面倒です。 – eastydude5

    +1

    ある種のBuilderパターンを使用できますか?おそらくクラスメソッドは?()。センサー()。timeInitial()。calcAverage()。returnStatus()。go() ' – Malvolio

    答えて

    3

    これは一般的な状況です。

    関数をリファクタリングして関数を小さな関数に分解します。

    関数はオブジェクトであり、引数として他の関数に渡すことができます。

    def step1(): 
        whatever 
    
    def step2(): 
        whatever 
    
    def step2_alternative(): 
        whatever 
    
    def original(args): 
        step1() 
        step2() 
    
    def revised(args, step2_choice): 
        step1() 
        step2_choice() 
    

    これでこれを行うことができます。

    revised(step2) 
    revised(step2_alternative) 
    

    機能オブジェクトを使用したプログラミングは、単なるOOです。

    +0

    +1はカジュアルなリマインダーのために、はい、機能さえもオブジェクトです。 – jathanism

    +0

    これは私がやったことです、ありがとう。基本的に、私は信じられないほど簡単なサブ関数ですべてを壊し、どのサブ関数がどのように/どのように相互作用するかというビジネスロジックを含むパブリックインターフェイス関数を使用しました。ありがとう! – eastydude5

    0

    引数として記述した関数にデータ処理関数を渡すことはできますか?

    あなたの好みに応じて多かれ少なかれエレガントになるかもしれません。 (私を許してください:私はpexpectについて何も知らないので、私はあなたの質問に誤解しているかもしれません!)

    関連する問題