Pregunta

Estoy tratando de implementar una clase de contenedor / proxy para un objeto de Java (baseClient) en v2.1 jython. Todo parece estar funcionando bien, excepto cuando se encuentra la siguiente declaración:

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

raise AttributeError(attr) se llama en __getattr__(), porque self.__baseClient no tiene atributo __ne__. Es importante mencionar que no se puede actualizar porque jython es una parte de un sistema. ¿Hay una manera de solucionar este 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

Muchas gracias!

¿Fue útil?

Solución

if __client != None:

Para las pruebas contra casos específicos, tales como Ninguno, es idiomática utilizar el operador identidad:

if __client is not None:

Esto evitará el problema de llamar a los comparadores.

Sin embargo, el hecho de que __getattr__ plantea AttributeError no debería ser un problema. El comparador debe llamar getattr especulativamente para __cmp__ (__ne__ primero en los nuevos pitones), y si se pone un AttributeError se supone que tragar en silencio y caer de nuevo a la comparación de identidad en su lugar. ¿Por qué la AttributeError causar un problema en su caso?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top