【发布时间】:2011-12-08 21:18:40
【问题描述】:
如果一个对象依赖于 Python 未包含的模块(如 win32api、gstreamer、gui 工具包等),并且该模块中的类/函数/方法可能会失败,那么该对象应该做什么?
这是一个例子:
import guimodule # Just an example; could be anything
class RandomWindow(object):
def __init__(self):
try:
self.dialog = guimodule.Dialog() # I might fail
except: guimodule.DialogError:
self.dialog = None # This can't be right
def update(self):
self.dialog.prepare()
self.dialog.paint()
self.dialog.update()
# ~30 more methods
这个类只是一个更大程序的一小部分(并且是不必要的,但很有用)。
假设我们有一个名为guimodule 的假想模块和一个名为Dialog 的类,它可能无法实例化。如果我们的 RandomWindow 类有 30 个操作这个窗口的方法,检查 if self.dialog is not None 会很痛苦,并且在经常使用的方法(如上面示例中的 update 方法)中实现时会减慢程序的速度。在 NoneType 上调用 .paint()(当 Dialog 加载失败时)会引发错误,并且使用原始的所有方法和属性创建一个虚拟的 Dialog 类将是荒谬的。
如何修改我的类以处理 Dialog 类的失败创建?
【问题讨论】:
标签: python oop coding-style module refactoring