2009-11-17 5 views
0

Я пытаюсь реализовать класс оболочки/прокси для java-объекта (baseClient) в jython v2.1. Все, кажется, работает нормально, за исключением того, когда встречается следующее утверждение:Jython 2.1 __getattr__

if __client != None # __client is an instance of the ClientProxy class 

raise AttributeError(attr) называется в __getattr__(), потому что self.__baseClient не имеет __ne__ атрибут. Важно отметить, что я не могу обновить, поскольку jython является частью системы. Есть ли способ обойти эту проблему?

class ClientProxy: 
    def __init__(self, baseClient): 
     self.__baseClient = baseClient 
     self.__initialised = 1 

    def __getattr__(self, attr): 
     if not self.__dict__.has_key('_ClientProxy__initialised'): 
      raise AttributeError(attr) 
     else: 
      if hasattr(self.__baseClient, attr): 
       return getattr(self.__baseClient, attr) 
      else: 
       raise AttributeError(attr) 


    def __setattr__(self, attr, val): 
     if not self.__dict__.has_key('_ClientProxy__initialised'): 
      self.__dict__[attr] = val 
      return 

     if hasattr(self.__baseClient, attr): 
      self.__baseClient.__setattr__(attr, val) 
     else: 
      self.__dict__[attr] = val 

Большое спасибо!

ответ

0
if __client != None: 

Для тестирования против конкретных случаев, таких как None, это идиоматическое использовать оператор идентичности:

if __client is not None: 

Это позволит избежать проблем вызова компараторов.

Однако факт, что __getattr__ вызывает AttributeError, не должен быть проблемой. Компаратор должен называть getattr спекулятивно для __cmp__ (__ne__ сначала на новых Pythons), и если он получает AttributeError, он должен молча проглотить его и вместо этого вернуться вместо сравнения идентичности. Почему в вашем случае возникает проблема AttributeError?

+0

После публикации этого вопроса я заметил, что AttributeError фактически поднят три раза - для '__ne__', для' __coerce__' и для '__cmp__' в этом порядке, но это не вызывает никаких проблем. Я оставил вопрос, чтобы понять, что происходит. Спасибо за быстрый и информативный ответ! – 2009-11-17 18:56:53

 Смежные вопросы

  • Нет связанных вопросов^_^