我经常发现自己处于这样一种情况:类有一个可选的依赖项。例如,下面的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
是否为None我更喜欢代码可读性的第一个选项,但是它需要为每个依赖项编写一个实现(尽管是一个非常小的依赖项)
为了避免这种情况,我一直在考虑一种通用依赖关系,如下所示:
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)这是Python(2)有更好的方法吗
我认为1)是一个有效的解决方案,也称为Null Object Pattern。
我看到了另一种可能的解决方案:
1) 移除依赖项并在
Example
类外调用notifier
,即在调用doTheBusiness
2) 也许用Obeserver Pattern
相关问题 更多 >
编程相关推荐