Python Jython 2.1__

Python Jython 2.1__,python,jython,word-wrap,setattr,getattr,Python,Jython,Word Wrap,Setattr,Getattr,我试图在JythonV2.1中为java对象(baseClient)实现一个包装器/代理类。除了遇到以下语句外,所有操作似乎都正常: if __client != None # __client is an instance of the ClientProxy class raiseattributeerror(attr)在中调用,因为self.\uuu baseClient没有\uu ne\uu属性。 重要的是我不能升级,因为jython是系统的一部分。有没有办法绕过这个问题 class

我试图在JythonV2.1中为java对象(baseClient)实现一个包装器/代理类。除了遇到以下语句外,所有操作似乎都正常:

if __client != None # __client is an instance of the ClientProxy class
raiseattributeerror(attr)
中调用,因为
self.\uuu baseClient
没有
\uu ne\uu
属性。 重要的是我不能升级,因为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:
对于针对特定实例(如None)进行测试,惯用的方法是使用identity运算符:

if __client is not None:
这将避免调用比较器的问题


但是,
\uuu getattr\uuu
引发
属性错误的事实应该不是问题。比较器应该推测性地调用
getattr
以获得
\uuu cmp\uuu
\uu ne\uuuuu
首先在较新的python上),如果它得到
AttributeError
,它应该默默地吞下它并返回身份比较。为什么
AttributeError
会在您的案例中引起问题?

在发布此问题后,我注意到AttributeError实际上被提出了三次-对于
\uuu ne\uuuu
,对于
\uu强制\uuuu
和对于
\uu cmp\uuu
,但它没有引起任何问题。我留下这个问题只是为了了解发生了什么。感谢您的快速和翔实的回答!