Я часто оказываюсь в ситуации, когда класс имеет необязательную зависимость. Например, notifier
в следующем.Существует ли общая «нулевая зависимость» Pythonic?
class Example(object):
def __init__(self, notifier=None):
self._notifier = notifier or DummyNotifier()
def doTheBusiness(self):
doSomeWork()
self._notifier.notifyComplete()
Как notifier
является необязательным, у меня есть два варианта:
- Если ни
notifier
не подается, поставить на его место вDummyNotifier
(в соответствии с примером выше), гдеDummyNotifier
является реализацией зависимость, которая не выполняет никаких действий - В
doTheBusiness
, проверьтеnotifier
не является ли Никто перед вызовом ничего на нем
Я предпочитаю первый вариант считывания кода, но это связано с необходимостью создания реализации для каждой зависимости (хотя и очень маленькой).
Чтобы избежать этого, я думал о родовой зависимости следующим образом:
class GenericDependency(object):
def generic(self, *args, **kwargs):
pass
def __getattr__(self, _):
return self.generic
Затем я могу вызвать любой метод на этом:
gd = GenericDependency()
gd.notifyComplete()
gd.anythingElse("also", "works", "with", any="arguments")
(Это, очевидно, работает только для действий - не функции, для которых требуется возвращаемое значение.)
Мой вопрос - (1) это Pythonic (2) есть лучший способ?