通常、記述子は次のようにクラス属性で使用されます。
class Owner(object):
attr = Attr()
を取得するときOwner.attr
、 where 、およびAttr.__get__(self, instance, owner)
が呼び出されます。self = Owner.attr
instance = None
owner = 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.param
instance = funct
owner = funct
owner
instance
None
funct
関数のデコレーターがパラメーターを処理するため、これが解決策に追加される可能性があります。たとえば、デコレータはラッパー文字列を変更できる必要があります。