0

我正在编写一个 Python 类,它将被多个调用应用程序导入和使用。每个调用应用程序都将编写为在启动时将类实例化一次(并且仅一次),然后维护该实例直到应用程序关闭。

成功的实例化涉及相当长的依赖项和检查列表,例如给定文件夹中是否存在给定的 MS Access 文件、更新该数据库的能力、关闭另一个文件夹中日志文件的读/写权限、存在与调用应用程序相关的某些其他文件夹......你明白了。我想做的是在类实例化时检查所有这些依赖项。如果其中任何一个失败,类中的代码将为用户提供一个错误弹出窗口,然后避免实例化该类。然后调用应用程序将检测到该类没有被实例化并简单地退出。

我已经扎根于其他各种线程,我发现的选项要么是创建一个工厂(这似乎有点夸大了所需的东西),要么覆盖了__new__方法(根据其他讨论可能很棘手......几乎每个我发现的代码示例有很长的评论警告所有它不起作用的情况)。

那么从首选实践的角度来看,这两种方法中的任何一种都是可行的吗?还是有其他一些最适合我想要完成的选择?

4

1 回答 1

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
于 2013-03-13T15:58:57.263 回答