gpt4 book ai didi

python - 在 Python 中编写一个无操作或虚拟类

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:05 25 4
gpt4 key购买 nike

假设我有这样的代码:

foo = fooFactory.create()

由于各种原因,fooFactory.create() 可能无法创建 Foo 的实例。

如果是这样,我希望 fooFactory.create() 返回一个虚拟/无操作对象。这个对象应该是完全惰性的——无论它如何被使用,它都不应该做任何事情或抛出任何异常。请注意,foo 没有返回值的方法。


我考虑了以下选项。

首先,创建一个模拟。这样做的好处是它很容易,而且能给我我想要的东西。缺点是在生产代码中使用模拟感觉很奇怪。更重要的是,我无法控制模拟库,因此它的行为可能会在某个时刻发生变化并破坏我的应用程序。

其次,创建一个dummy NoopFoo/DummyFoo 类。然后我手动实现它需要支持的方法,把pass放在方法体里就行了。我知道它的好处永远不会破坏我的应用程序。缺点是,如果将来使用 Foo 的其他方法,我必须知道更新 NoopFoo/DummyFoo ... 或我的应用程序可能会坏。

还有比这两个更好的选择吗?请注意,我是 Python 的新手,所以如果它涉及更高级的 Python 功能,我将不胜感激。谢谢!

最佳答案

您要求一个什么都不做的对象。 object 的实例正是这样做的。

def create():
return object()

另一方面,您可能真的希望它做一些事情。您可能希望它具有执行并返回 None 的方法。您可能会返回此类的一个实例:

In [1]: class Nop(object):
...: def nop(*args, **kw): pass
...: def __getattr__(self, _): return self.nop
...:

In [2]: n=Nop()

In [3]: n.foo
Out[3]: <bound method Nop.nop of <__main__.Nop object at 0x7f9fec034650>>

In [4]: n.foo()

In [5]: n.foo(1,2,3)

关于python - 在 Python 中编写一个无操作或虚拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24946321/

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