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