我想要一个类在某个事件上调用我的函数。我的问题是,检查“None”以检查函数“Pointer”是否已初始化,这是否是一种好的做法?有没有其他的陷阱在使用这个模式?在
课堂上:
class Consumer(object):
_functionCallBack = None
def __init__(self, hostName):
self._hostName = hostName
def SetCallBack(self, funcCallback):
self._functionCallBack = funcCallback
def HandleMessage(self, body):
print(" [x] Received %r" % body)
if self._functionCallBack is not None:
self._functionCallBack(body)
在主叫代码中:
^{pr2}$我找不到这方面的任何最佳实践——如果Python文档中有一些,你能告诉我吗。在
这里的一个解决方案(从设计角度来看)是使用NullObject模式——在本例中,将默认的
functionCallback
设为无操作函数,这样就不必测试任何东西。此外,您可能希望在实例化时传递回调,而不是稍后添加它(除非在实际代码中,您需要在不同的阶段这样做)现在,这是否比针对
None
进行测试更好,留给读者欣赏。优点:你没有特殊情况,缺点是:你可能有一个无用的函数调用。如果您希望Consumer
实例在大多数情况下都能得到一个有效的回调,“no-op-callback”解决方案可能会稍微干净一点,否则“check-withnone”是完全有效的。在你通常应该和if。。。不是None:构造来检测未初始化的变量。一种选择是使用try/catch子句,但您的情况不是关于意外的替代流,try/catch是可以避免的。在
另请参见:How to test whether a variable has been initialized before using it?
相关问题 更多 >
编程相关推荐