0

jython v2.1 で Java オブジェクト (baseClient) のラッパー/プロキシ クラスを実装しようとしています。次のステートメントが発生した場合を除いて、すべてが正常に機能しているようです。

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

raise AttributeError(attr)属性がない__getattr__()ため、で呼び出されます。jython はシステムの一部であるため、アップグレードできないことに注意してください。この問題を回避する方法はありますか?self.__baseClient__ne__

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

どうもありがとう!

4

1 に答える 1

0
if __client != None:

None などの特定のインスタンスに対してテストする場合、identity 演算子を使用するのが慣用的です。

if __client is not None:

これにより、コンパレータの呼び出しの問題が回避されます。

ただし、__getattr__レイズするという事実AttributeErrorは問題にならないはずです。getattrコンパレーターは投機的に forを呼び出す必要があります__cmp__(__ne__新しい Python では最初) AttributeErrorAttributeErrorあなたの場合、原因が問題になるのはなぜですか?

于 2009-11-17T18:26:30.757 に答える