通常、記述子は次のようにクラス属性で使用されます。
class Owner(object):
attr = Attr()
を取得するときOwner.attr、 where 、およびAttr.__get__(self, instance, owner)が呼び出されます。self = Owner.attrinstance = Noneowner = Owner
がOwnerインスタンス化instanceされると、 のインスタンスになりますOwner。
ここで、この概念をクラス属性ではなくメソッド パラメーターに適用したいと思います。
実際にどのように見えるか ( の機能がAttr、特定の文字列で文字列をラップすることであると仮定しましょう):
class Example(object):
def funct(self, param=Attr('t')):
return param == 'test' # < param calls the descriptor here
e = Example()
e.funct('es') # < is True because 'es' wrapped with 't' becomes 'test'.
にアクセスするときparam、は、andAttr.__get__(self, instance, owner)で呼び出されます( andを同じにする意味はありませんが、 ? かもしれません)。しかし、クラスではないため、これは機能しません。どうすれば仕事に似たものを手に入れることができますか?self = funct.paraminstance = functowner = functownerinstanceNonefunct
関数のデコレーターがパラメーターを処理するため、これが解決策に追加される可能性があります。たとえば、デコレータはラッパー文字列を変更できる必要があります。