Jython 2.1 __getAtTr__
Pergunta
Estou tentando implementar uma classe Wrapper/Proxy para um objeto Java (Baseclient) em Jython v2.1. Tudo parece estar funcionando bem, exceto quando a seguinte declaração é encontrada:
if __client != None # __client is an instance of the ClientProxy class
raise AttributeError(attr)
é chamado em __getattr__()
, Porque self.__baseClient
não tem __ne__
atributo. É importante mencionar que não posso atualizar porque Jython faz parte de um sistema. Existe uma maneira de contornar esse problema?
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
Muito obrigado!
Solução
if __client != None:
Para testar contra casos específicos como nenhum, é idiomático usar o operador de identidade:
if __client is not None:
Isso evitará o problema de chamar comparadores.
No entanto, o fato de que __getattr__
levanta AttributeError
Não deveria ser um problema. O comparador deve ligar getattr
especulativamente para __cmp__
(__ne__
primeiro em pythons mais recentes) e se conseguir um AttributeError
Deve -se engolir silenciosamente e voltar à comparação de identidade. Por que o AttributeError
causar um problema no seu caso?