属性にアクセスするときに何かを印刷してください
-
21-12-2019 - |
質問
__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
メソッドを持っている場合は、すでに新しいスタイルのクラスです。
所属していません StackOverflow