Python函数“Pointer”:检查

2024-06-05 23:48:49 发布

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

我想要一个类在某个事件上调用我的函数。我的问题是,检查“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文档中有一些,你能告诉我吗。在


Tags: 函数selfnoneconsumerdef模式事件body
2条回答

这里的一个解决方案(从设计角度来看)是使用NullObject模式——在本例中,将默认的functionCallback设为无操作函数,这样就不必测试任何东西。此外,您可能希望在实例化时传递回调,而不是稍后添加它(除非在实际代码中,您需要在不同的阶段这样做)

def noop(message):
    pass

class Consumer(object):
    def  __init__(self, hostname, callback=noop):
        self._hostname = hostname
        self._callback = callback

    def set_callback(self, callback):
        self._callback = callback

    def handle_message(self, body):
        logger.info(" [x] Received %r", body)
        self._callback(body)

现在,这是否比针对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?

相关问题 更多 >