2013-03-13 55 views
0

我正在編寫一個Python類,將被導入&由多個調用應用程序使用。每個調用應用程序都將被編寫,以便在啓動時實例化該類(並且僅一次),然後維護該實例,直到該應用程序關閉。乾淨地處理類實例化過程中的問題

成功實例化涉及相當長的依賴關係列表&檢查,例如,給定文件夾中給定MS Access文件的存在,更新該數據庫的能力,對另一個文件夾中的日誌文件具有讀/寫權限,與調用應用程序相關的某些其他文件夾的存在......您明白了。我想要做的是在類實例化時檢查所有這些依賴關係。如果其中任何一個失敗,則該類中的代碼將爲用戶提供一個錯誤彈出窗口,然後不要實例化該類。調用應用程序然後會檢測到該類未被實例化並簡單地退出。

我已經紮根於各種其他線程,我發現的選項是創建一個工廠(這似乎有點誇大所需),或覆蓋方法(其他討論可能會非常棘手。 ..很多我發現的每一個代碼示例都有很長的一段評論,警告它不會工作的所有情況)。

因此,從一個首選實踐的角度來看,這兩種方法中的任何一種都行嗎?或者還有其他一些替代方案對我所期望完成的項目最適合嗎?

回答

2

標準的做法是引發一個例外,該代碼實例化類捕獲和處理該異常:

class MyClass(object): 
    def __init__(self, foo, bar, baz): 
     if not self._database_exists(foo): 
      raise ValueError('No valid database {}'.format(foo)) 

     # etc. 

則:

try: 
    theinstance = MyClass('foooption', barvalue, bazvalue) 
except ValueError as e: 
    # Oops, something went wrong 
    showErrorToUser(e) 
    theinstance = None 
+0

感謝。儘管這意味着在調用應用程序中多出幾行,但它比我最初的計劃(類默默無聞地創建)要清晰得多。 – JDM 2013-03-13 16:09:00