Lattyware が unutbu の回答へのコメントで説明しているように、afunction
各インスタンスの作成時ではなく、クラス自体の作成中にデコレータが実行されるため、求めていることを直接実行することはできません。
「クラスによって定義された関数のリスト」だけが本当に必要な場合は、そのために特別なものはまったく必要ありません。でそのリストを作成するだけです__init__
:
def __init__(self, a):
self.a = a
self.li = [f for f in dir(self) if inspect.ismethod(f)]
特定の特定の関数のリストが必要な場合、最も簡単な方法はunutbu
、デコレータを必要としない方法です。
デコレーターに「このメソッドは入る必要があります」とマークするだけの場合はli
、sr2222 の回答を参照してください。
これらはどれもあなたが求めたものではありませんが、おそらくあなたが求めているものです。関数を に追加するために実際にデコレータを使用する方法はいくつかありますがself.li
、それらはすべて非常に恐ろしいものであり、おそらくそれらを必要としないでしょう。例えば:
class Foo:
def __init__(self,a):
self.a = a
self.li = []
def mydecorator(f):
self.li.append(f)
return f
@mydecorator
def afunction(self):
print('a')
self.afunction = new.instancemethod(afunction, self, Foo)