我一直收到以下错误:
AttributeError: Caribou instance has no attribute 'on_key_up'
问题是,我很确定我确实有这个属性......
以下是我的代码摘录(来自caribou.py):
def on_key_up(self, event):
if event.event_string == "Shift_R":
_r_shift_down = False
elif event.event_string == "Shift_L":
_l_shift_down = False
这是导致错误的行:
pyatspi.Registry.registerKeystrokeListener(caribou.on_key_up, mask=None, kind=(pyatspi.KEY_RELEASED_EVENT,))
有人看到我做错了吗?
谢谢!
编辑:哎呀 - 这是我创建caribou实例的方式:
caribou = Caribou()
答案 0 :(得分:4)
OP在dir(caribou)
给他的评论中提及:
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
所以绝对会注意到caribou
是模块这一点 - 其他任何东西通常都没有__builtins__
等。错误消息然而,显然提到Caribou instance
- 所以我想在dir
电话和以下尝试访问caribou.on_key_up
之间发生了其他必须的事情。
显然OP正在多次使用那个心爱的caribou
标识符(在某些时候它与Caribou实例绑定,但在其他时候它显然是一个模块,事实上OP确实提到了{{1}这显然将在导入时成为名为caribou.py
的模块。
所以我的建议是澄清命名。例如,使用
caribou
而不是将另一个值绑定到caribou_instance = Caribou()
名称,并将caribou
的所有使用替换为caribou
的实例(而不是模块)。这可能会给你一个不同的错误,这可能会提供更多信息。
答案 1 :(得分:2)
如果你打印dir(北美驯鹿)怎么办?你看到了你的方法吗?
答案 2 :(得分:1)
您没有显示导入语句或“caribou”实例的创建方式。我的猜测是你试图通过caribou传递caribou.on_key_up 模块,而不是实例。