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!

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top