Cor*_*gan 7 python class function decorator inspect
我在PY有一个装饰师.它是一种方法,并将该函数作为参数.我想基于传递的函数创建一个基于目录的结构.我正在使用父目录的模块名称,但是想使用类名作为子目录.我无法弄清楚如何获取拥有fn对象的类的名称.
我的装饰者:
def specialTest(fn):
filename = fn.__name__
directory = fn.__module__
subdirectory = fn.__class__.__name__ #WHERE DO I GET THIS
Run Code Online (Sandbox Code Playgroud)
如果fn是instancemethod,那么你可以使用fn.im_class.
>>> class Foo(object): ... def bar(self): ... pass ... >>> Foo.bar.im_class __main__.Foo
请注意,这不适用于装饰器,因为在定义类之后,函数只会被转换为实例方法(即,如果@specialTest用于装饰bar,它将无法工作;如果它甚至可能,那么在此时执行将必须通过检查调用堆栈或同样不快乐的事情来完成.
在Python 2中,您可以im_class在方法对象上使用属性.在Python 3中,它将是__self__.__class__(或type(method.__self__)).