Если объект полагается на модуль, который не включен в 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
в примере выше). Вызов .paint()
для NoneType
(когда Dialog
не удается загрузить) вызовет ошибку, и создание фиктивного класса Dialog
со всеми методами и атрибутами оригинала будет абсурдным.
Как я могу изменить свой класс для обработки неудачного создания класса Dialog
?