質問

__getattribute__を使用してクラスの属性にアクセスしているときに何かを印刷しようとしています ここでの大きな問題は再帰と私がGetAttributeメソッドを上書きしています。

私はこの問題を解決するためにメタクラスを使わなければならないと思います。 とにかくあなたがこの問題の答えがあれば。

役に立ちましたか?

解決

__getattribute__は、インスタンス上の all属性アクセスに使用されます。それはその方法のself.recursionを含みます。

あなた revery __getattribute__を使用する必要があります。実際に適切なユースケースがある場合は、属性アクセスを回避するか、無限の再帰問題を回避するためにsuper(A, self).__getattribute__()を使用してください。

あなたのUSECASEの場合(属性がアクセスされているときはいつでも何かを印刷する)、依然として元の属性を返します。

class A(object):
    def meth(self):
        return "met"

    def __getattribute__(self, name):
        print "IN CLASS A"
        return super(A, self).__getattribute__(name)
.

super()のうちに機能するには、super()から継承している新しいスタイルのクラスを使用する必要があります。他のものから継承していて、他の何かがobjectメソッドを持っている場合は、すでに新しいスタイルのクラスです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top