下面的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


我收到以下错误:

Traceback (most recent call last):
  File "module.py", line 1, in <module>
    class NetVend:
  File "module.py", line 5, in NetVend
    def sendCommand(command, callback=NetVend.blankCallback):
NameError: name 'NetVend' is not defined

最佳答案

您仍无法在定义类名称的同时引用它。

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

而且,函数关键字参数的默认值是在定义时绑定的,而不是在调用方法时绑定的。请使用None作为标记。

代替:

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


使用:

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


您可能想将类用作实例的工厂,而不是用作本质上是函数的名称空间。即使您仅使用一个实例(单例),实际首先创建一个实例也有好处。

关于python - 定义类时的Python NameError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18613839/

10-11 20:51
查看更多