为什么在拥有属性时会出现AttributeError?

时间:2010-02-27 23:26:06

标签: python attributeerror

我一直收到以下错误:

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()

3 个答案:

答案 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 模块,而不是实例

相关问题