我试图实现在jython的V2.1 Java对象(baseClient)的包装/代理类。似乎一切都遇到下面的语句时,除了正常工作:

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

非常感谢!

有帮助吗?

解决方案

if __client != None:

有关针对如无特定实例的测试,这是惯用的使用恒等算子:

if __client is not None:

这将避免调用比较器的问题。

然而,__getattr__引发AttributeError不应该是一个问题的事实。比较推测应该叫getattr__cmp____ne__首先在新的蟒蛇),如果它得到了AttributeError它应该是默默吞下它,并回落到识别比对来代替。为什么AttributeError你的情况引起的问题?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top