gpt4 book ai didi

定义类时的Python NameError

转载 作者:太空宇宙 更新时间:2023-11-04 09:07:35 24 4
gpt4 key购买 nike

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

最佳答案

您不能在定义类名时引用它

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

此外,函数关键字参数的默认值在定义时绑定(bind),而不是在调用方法时绑定(bind)。使用 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 NameError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18613839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com