質問

私はのJython v2.1のJavaオブジェクト(baseClient)のラッパー/プロキシクラスを実装しようとしています。すべては次のステートメントに遭遇した場合を除き、[OK]を動作しているようだ。

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