是否存在Pythonic泛型“空依赖”?

2024-09-29 01:30:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我经常发现自己处于这样一种情况:类有一个可选的依赖项。例如,下面的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)有更好的方法吗


Tags: 方法selfnoneobjectexampledef情况generic
1条回答
网友
1楼 · 发布于 2024-09-29 01:30:44

我认为1)是一个有效的解决方案,也称为Null Object Pattern
我看到了另一种可能的解决方案:
1) 移除依赖项并在Example类外调用notifier,即在调用doTheBusiness
2) 也许用Obeserver Pattern

相关问题 更多 >