Почему я получаю AttributeError, когда у меня есть атрибут? - PullRequest
1 голос
/ 28 февраля 2010

Я получаю следующую ошибку:

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

Кто-нибудь видит, что я делаю не так?

Спасибо!

edit: Упс. Вот как я создаю экземпляр карибу:

caribou = Caribou()

Ответы [ 3 ]

4 голосов
/ 28 февраля 2010

ОП упоминает в комментарии, который dir(caribou) дает ему:

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

так что определенно смотрит в тот момент, что caribou является модулем - обычно ничего не будет иметь __builtins__ и т. Д. В сообщении об ошибке, однако, четко упоминается Caribou instance - поэтому я представляю, что что-то еще должно происходить между этим dir вызовом и следующей попыткой доступа к caribou.on_key_up.

Ясно, что у ОП несколько любимых идентификаторов caribou (в какой-то момент он связан с экземпляром Caribou, но в других случаях это явно модуль, и на самом деле ОП упоминает caribou.py, который явно станет модулем с именем caribou при импорте).

Поэтому я рекомендую уточнить наименование. Например, используйте

caribou_instance = Caribou()

вместо привязки еще одного значения к имени caribou и замены всех вариантов использования caribou, которые должны быть экземпляром (а не модулем), на caribou_instance. Это может привести к другой ошибке, которая может быть более информативной.

2 голосов
/ 28 февраля 2010

Что произойдет, если вы напечатаете dir (карибу)? Вы видите свой метод?

1 голос
/ 28 февраля 2010

Вы не показываете свои операторы импорта или то, как создается "карибу" экземпляр .Я предполагаю, что вы пытаетесь передать caribou.on_key_up как в карибу модуль , а не экземпляр .

...