定义类时Python名称错误

2024-09-30 20:31:37 发布

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

下面的Python由于某种原因失败了。在

class NetVend:
    def blankCallback(data):
        pass

    def sendCommand(command, callback=NetVend.blankCallback):
        return NetVend.sendSignedCommand(command, NetVend.signCommand(command), callback)

    def sendSignedCommand(command, signature, callback):
        pass

我得到以下错误:

^{pr2}$

Tags: datareturndef错误callbackpasscommandclass
2条回答

好吧,我不想说第一个,但第二个选择肯定是正确的:-)

问题是默认参数在编译时被计算,但此时NetVend不存在于该范围中,因为(显然)类本身还没有完全求值。在

方法是将默认值设置为“无”,然后在方法中进行检查:

def sendCommand(command, callback=None):
   if callback is None:
        callback=NetVend.blankCallback

在定义类名时,不能引用该类名。在

类主体作为本地命名空间执行;您可以将函数和属性作为本地名称引用。在

此外,函数关键字参数的默认值在定义时间绑定,而不是在调用方法时绑定。使用None作为哨兵。在

而不是:

def sendCommand(command, callback=NetVend.blankCallback):
    return NetVend.sendSignedCommand(command, NetVend.signCommand(command), callback)

使用:

^{pr2}$

您可能希望将该类用作实例的工厂,而不是用作本质上是函数的命名空间。即使您只使用了一个实例(单例实例),但首先实际创建一个实例还是有好处的。在

相关问题 更多 >