2013-03-13 56 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