我经常发现自己处于一个类具有可选依赖项的情况。例如,以下为notifier
。
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)有更好的方法吗?
答案 0 :(得分:1)
我说1)是一种有效的解决方案,也称为Null Object Pattern
我看到另一种可能的解决方案:
1)删除依赖关系,并在notifier
课程外拨打Example
,即在致电doTheBusiness
之后
2)也许使用Obeserver Pattern?