假设我有这样的代码:
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/