簡體   English   中英

使用python裝飾器裝飾功能的一部分

[英]Using python decorator to decorate a part of function

我正在嘗試模擬git包裝器,以便我們對其進行測試。 我計划使用mockproc python庫,該庫通過提供的腳本提供模擬任何進程名稱的功能。 它的工作原理如下:

self.scripts.append( 'process-name', returncode=0, stdout="output to process" )
with self.scripts:
        run_and_handle_result()

我需要在此之上添加一個裝飾器層,以便可以做一些額外的事情,例如重試句柄。 我想要的是這樣的-

@mockproc('git') # tells that we are mocking git
def test_something(mock_proc):
    mock_proc.set_script("sleep (60)")
    # Run some git command
    mockproc.check_exit_signal()

問題是我希望我的裝飾器處理with self.scripts部分。 所以我想要的是裝飾器運行該函數,將進程名稱設置為git,這很簡單。 然后運行測試函數,該函數將添加腳本並在git命令周圍添加with self.script ,然后恢復該函數。

反正有做嗎? 裝飾器是實現它的壞方法嗎? 這不是化妝品要求。 我需要這樣做,因為在某些命令中有重試邏輯,為此我需要提供多個腳本來模擬進程並運行多次。

如果我對您的理解正確,則希望覆蓋函數的命名自由變量。 您可以使用fun.func_globals[some_name] = some_value 例如

def x(a):
    pow2(a)

 x.func_globals['pow2'] = lambda y: y*y

 x(3) == 9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM