我有一個模塊,我想在幾個不同的應用程序中使用。該模塊非常簡單,並具有執行特定任務的功能:在python函數中使用可選的跟蹤變量
# Fancy module
# Task1
def do_task1(param1):
step1()
step2()
step3()
第一個應用程序直接按原樣使用它。
對於第二個應用程序,我想傳遞跟蹤器對象,以跟蹤處理的狀態。像這樣:
# Fancy module with tracker
# Task1
def do_task1(param1, tracker):
tracker.message = 'Starting step1'
step1()
tracker.message = 'Starting step2'
step2()
tracker.message = 'Starting step3'
step3()
tracker.message = 'Processing completed'
我不想有2個版本的相同模塊庫(有和沒有跟蹤)。我可以想到的一個辦法是使跟蹤器可選,然後使用if
跟蹤是否需要。
# Fancy module with conditional tracker
# Task1
def do_task1(param1, tracker=None):
if tracker:
tracker.message = 'Starting step1'
step1()
if tracker:
tracker.message = 'Starting step2'
step2()
if tracker:
tracker.message = 'Starting step3'
step3()
if tracker:
tracker.message = 'Processing completed'
我不是太高興做的這種方式,因爲
- 它增添了不少附加條件和代碼(影響可讀性)
- 必須有一個更好的辦法!
有什麼建議嗎?
謝謝,這也是我的同事所建議的。 '如果跟蹤器的行是None:tracker = Tracker()'。你會如此友善地添加這段代碼來澄清你的答案,我很樂意將它標記爲答案? –
@PlastyGrove完成。 FWIW我們在我們的旗艦項目 –
中有這個非常確切的模式尼斯,謝謝!這是一個非常好的主意,只是創建一個虛擬而不是導入實際的跟蹤器對象,並使用它來實例化,非常有幫助:) –