8

私はPYにデコレータを持っています。これはメソッドであり、関数をパラメーターとして受け取ります。渡された関数に基づいてディレクトリ構造を作成したい。親ディレクトリにはモジュール名を使用していますが、サブディレクトリにはクラス名を使用したいと考えています。fn オブジェクトを所有するクラスの名前を取得する方法がわかりません。

私のデコレーター:

def specialTest(fn):
    filename = fn.__name__
    directory = fn.__module__
    subdirectory = fn.__class__.__name__ #WHERE DO I GET THIS
4

3 に答える 3

8

fnが の場合instancemethod、 を使用できますfn.im_class

>>> クラス Foo(オブジェクト):
... デフバー(自己):
... 合格
...
>>> Foo.bar.im_class
__main__.Foo

関数はクラスが定義されたにのみインスタンスメソッドに変換されるため、これはデコレータからは機能しないことに注意してください(つまり、 decoratorに使用された場合、機能しません。可能であれば、その時点でそれを行うと呼び出しスタックまたは同様に不幸なことを検査して行う必要があります)。@specialTestbar

于 2011-10-06T21:08:53.703 に答える
6

im_classPython 2では、メソッド オブジェクトで属性を使用できます。Python 3 では__self__.__class__(またはtype(method.__self__)) になります。

于 2011-10-06T21:11:48.567 に答える