Python 3.x 在类变量I can';不明白

Python 3.x 在类变量I can';不明白,python-3.x,Python 3.x,我试图创建一个类静态方法,然后在类变量中使用它作为回调。我遇到了一个静态方法不可调用的问题,我无法理解: 从数据类导入数据类 从输入import Callable开始 @数据类 类别选项: txt:str 回调:可调用 类窗口: @静力学方法 定义(a=1): 打印('使用a',a进行操作) cvar=Option(txt='doit',callback=\u doit) w1=窗口() w1._doit() #很好 窗口。_doit() #很好 w1.cvar.callback() #这失败了

我试图创建一个类静态方法,然后在类变量中使用它作为回调。我遇到了一个静态方法不可调用的问题,我无法理解:

从数据类导入数据类
从输入import Callable开始
@数据类
类别选项:
txt:str
回调:可调用
类窗口:
@静力学方法
定义(a=1):
打印('使用a',a进行操作)
cvar=Option(txt='doit',callback=\u doit)
w1=窗口()
w1._doit()
#很好
窗口。_doit()
#很好
w1.cvar.callback()
#这失败了
上面最后一次调用失败,出现
“TypeError:'staticmethod'对象不可调用”

我不知道为什么会出现这种情况,但更让我困惑的是,如果我删除了
@staticmethod
行,那么事情就“正常”了——代码中的所有3个调用都正常工作

我知道我一定是做错了什么蠢事,但我不知道上面的问题是什么……有什么帮助吗


谢谢

EDIT:Oops,@Richard正确地指出我原来的示例被破坏了-我没有看到错误,因为我已经定义了运行原始代码的
窗口
类。有点棘手,但这里有一个版本,应该与更详细的

编辑#2:叹气,修复了另一个打字错误:^(

例如:

cvar = Option(txt='doit', callback=_doit.__func__)

多亏了上面的评论,我检查了之前对类似问题的回答

要更正上面的代码(在绑定静态方法之前尝试引用静态方法),需要直接引用函数位置:

类窗口:
@静力学方法
定义(a=1):
打印('使用a',a进行操作)
cvar=Option(txt='doit',callback=\u doit.\u函数\u)

另一个选项(我已经发现它起作用了,但我更愿意明确地将我的函数标识为staticmethod)是删除staticmethod装饰器。

谢谢-这是我的第一个想法,我尝试了……但是失败了,因为
没有定义名称“Window”
…谢谢!…请注意,您需要编辑答案以删除()在func之后…否则它将执行函数,而不是指向函数。