2011-05-13 130 views
0

我有一個通過telnet/pexpect登錄到傳感器的功能,並充當數據收集器。什麼是抽象函數的優雅方式 - 不是對象?

我不想重寫登錄的部分,抓取數據,並解析出它的相關輸出(pexpect)。不過,我需要做不同的事情,此代碼,並將其收集

的數據。例如,我可能需要:

  • 時間,直到第一次讀取返回

  • 取平均值不同數量的傳感器讀數的

  • 返回的狀態(這是一個數據片),或返回傳感器 讀數(其是 數據的一個單獨的片)fr的OM輸出

歸根結底,還是應該登錄並解析輸出相同的,我想用一個代碼塊的一部分。

代碼越高,它就會被瞬間使用。當我打電話時,我知道需要收集什麼類型的數據,就是這樣。構建對象太笨拙。

我的用法超過了爲單個函數添加更多參數。

任何想法?

+0

Python只有一些全局構造:函數,對象,類,模塊。是什麼讓你覺得「構建物體太笨拙」? – Malvolio 2011-05-13 02:03:41

+0

這樣,在功能上,我需要像使用方法一樣使用它,並執行一次方法。爲此類實例化類似乎很麻煩。 – eastydude5 2011-05-13 02:12:07

+1

也許你可以使用某種Builder模式? '傳感器()。timeInitial()。calcAverage()。returnStatus()。go()' – Malvolio 2011-05-13 02:17:36

回答

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 2011-05-13 15:51:36

+0

這是我最終做的,謝謝。基本上,我用非常簡單的子功能打破了一切,並使用了一個公共接口函數,該函數包含子功能如何/何時/以何種順序進行交互的所有業務邏輯。謝謝! – eastydude5 2011-05-16 23:17:22

0

您可以將數據處理函數傳遞給您描述爲參數的函數嗎?

這可能是或多或少優雅,取決於你的口味。 (原諒我:我對pexpect一無所知,甚至可能誤解了你的問題!)

相關問題