gpt4 book ai didi

python - 是否有 Pythonic 泛型 "null dependency"?

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:57 24 4
gpt4 key购买 nike

我经常发现自己处于类具有可选依赖项的情况。比如下面的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) 这是 Pythonic (2) 有更好的方法吗?

最佳答案

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

关于python - 是否有 Pythonic 泛型 "null dependency"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28767666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com