Skip to main content
 首页 » 编程设计

python之为什么我在拥有属性时会收到 AttributeError

2025年05月04日21mate10pro

我不断收到以下错误:

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

请您参考如下方法:

OP 在评论中提到 dir(caribou) 给他:

['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__'] 

所以它肯定看caribou是一个模块——通常没有其他东西有__builtins__ 等等。然而,错误消息清楚地提到了一个 Caribou 实例——所以我想在那个 dir 调用和以下尝试访问 caribou.on_key_up。

显然,OP 多次使用了那个心爱的 caribou 标识符(在某些时候它绑定(bind)到 Caribou 实例,但在其他时候它显然是一个模块,而且 OP 确实提到了一个caribou.py,导入后显然将成为名为 caribou 的模块。

所以我的建议是澄清命名。例如,使用

caribou_instance = Caribou() 

不是将另一个值绑定(bind)到 caribou 名称,而是将 caribou 的所有使用替换为 实例(而不是模块)驯鹿实例。这可能会给你一个不同的错误,这可能会提供更多信息。